home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 522 / okami12 / doc / commands.doc < prev    next >
Encoding:
Text File  |  1991-04-17  |  136.1 KB  |  3,849 lines

  1.  
  2.     ===============================================
  3.  
  4. @(#)      OKAMI SHELL VERSION 1.2 - KOMMANDO-REFERENZ
  5.  
  6.     ===============================================
  7.             Stand: 30.12.90
  8.  
  9.  
  10.     BITTE ERST DIE DATEIEN README UND OKAMI.DOC LESEN!
  11.  
  12.  
  13.  
  14. Dies ist eine Referenzdatei, die man sich einmal kurz durchlesen sollte,
  15. um zu sehen, was die Shell alles zu bieten hat. Danach kann man sie sich
  16. ausdrucken und neben den Rechner legen, die einzelnen Abschnitte können
  17. aber auch durch die Online-Help-Funktion durch Druck auf die Help-Taste
  18. angesehen werden. Dazu muß der Dateiname dieser Datei in der Shellvariablen
  19. HELPFILE gespeichert sein.
  20. Zum Ausdrucken empfehle ich das Pd-Programm Idealist, das auf einem 9-Nadel-
  21. drucker ca. 250 Zeilen auf eine Seite drucken kann (auf einem 24-Nadel-Drucker
  22. noch mehr).
  23.  
  24.  
  25. Zu jedem Kommando wird die Syntax des Kommandos sowie, falls vorhanden, die
  26. zum Laufen des Kommandos notwendigen Dateien angegeben.
  27. Für die Syntaxschreibweise gilt:
  28.     Angaben in [] (eckigen Klammern) koennen, muessen aber nicht
  29.     angegeben sein.
  30.     Angaben in {} (geschwungenen Klammern) koennen beliebig oft
  31.     (auch null mal) angegeben sein.
  32.     Von durch | (senkrechten Strich) getrennten Angaben wird
  33.     jeweils eine erwartet.
  34. Numerische Werte koennen in folgender Form angegeben werden:
  35.     1234        entspricht der dezimalen Zahl 1234
  36.     01234        entspricht der oktalen Zahl 1234 (=668 dezimal)
  37.     0x1234        entspricht der Hex-Zahl 1234 (=4660 dezimal)
  38.     %1011        entspricht der Binärzahl 1011 (=11 dezimal)
  39.     !A        entspricht dem Ascii-Code von A (=65 dezimal)
  40. Vor jedem dieser Formate kann ein Minuszeichen stehen, um eine negative Zahl
  41. anzuzeigen. ACHTUNG: Bei Kommandos, die Flags benutzen, wird dieses Minus-
  42. zeichen als Einleitung der Flags und daher die folgende Zahl als die Flags
  43. angesehen, was normalerweise in einem Syntaxfehler endet. Daher muß in sol-
  44. chen Fällen  die Zahl in (einfache oder doppelte) Anführungszeichen gesetzt
  45. werden.
  46.  
  47. Steuersequenzen, z.B. VT52-Codes, können mit dem Fluchtsymbol ^ (Dach)
  48. benutzt werden. Die Verwendung des Fluchtsymbols ist unter dem internen
  49. Kommando "echo" beschrieben. Das dort gesagte gilt auch für alle anderen
  50. Kommandos.
  51.  
  52. Flags können einzeln, aber auch in Gruppen durch das jeweilige Kennungs-
  53. zeichen eingeleitet werden, z.B. sind äquivalent:
  54.     wc -lcn
  55. und    wc -l -c -n
  56.  
  57. Dies gilt nicht, wenn die Flags aus mehr als einem Zeichen bestehen oder
  58. wenn zusätzliche Informationen angegeben werden, wie z.B. bei format oder
  59. rsconf. Außerdem erlauben einige Kommandos nicht die Zusammenfassung oder
  60. die Einzelschreibweise, dies ist dann jeweils angegeben.
  61.  
  62. Es gibt einige Flags, die sich eingebürgert haben und bei einigen Kommandos
  63. (nicht bei allen) dieselbe Bedeutung haben, diese sind:
  64.  
  65.     -a (alle)        (das Kommando tut etwas für alle in Frage
  66.                  kommenden Argumente. Bsp.: pwd, ls)
  67.     -i (interaktiv)        (das Kommando fragt den Anwender nach
  68.                  gewissen Dingen. Bsp.: rm)
  69.     -l (lang)        (gibt zusätzliche oder ausführliche Informa-
  70.                  tionen. Bsp.: ls, ver)
  71.     -v (verbose)        (das Kommando sagt, was es tut, Bsp.: format)
  72.     -q (quiet)        (das Kommando erzeugt keine Ausgabe, oder:)
  73.        (query)        (wie -i)
  74.     -f (fast)        (das Kommando umgeht Sicherheitsabfragen u.ä.,
  75.                  um so schnell wie möglich zu laufen. Bsp.:
  76.                  rm, shutdown)
  77.  
  78. Achtung: Alle Angaben über Shellscripts (z.B. "Verwendung nur in Shell-
  79. scripts erlaubt") gelten ebenso für Shellfunktionen.
  80.  
  81.  
  82. 0) Nicht-dokumentierte Kommandos:
  83.  
  84. Gibt es, na klar. Sie werden hier nicht erklärt, da sie sonst ja nicht mehr
  85. nicht-dokumentiert währen. Mit cmds kann man die Namen aller Kommandos heraus-
  86. finden, auch die der nicht-dokumentierten. Man kann sie auch benutzen, aber
  87. man sollte sich nicht darauf verlassen, daß sie in späteren Versionen der
  88. Shell noch genauso wie in der jetzigen funktionieren oder überhaupt noch vor-
  89. handen sind.
  90.  
  91.  
  92. 1) Interne Kommandos:
  93.  
  94. Interne Kommandos werden aufgerufen, indem man am Shell-Prompt den Namen
  95. des Kommandos, gefolgt von den Parametern, eingibt.
  96.  
  97. Rückgabewerte:
  98. Jedes interne Kommando gibt einen numerischen Wert zurück, der sich nach Aus-
  99. führung des Programms in der Shellvariablen "?" befindet. Außerdem wird
  100. der Rückgabewert von den Kommandos if und while benutzt.
  101. Normalerweise geben die Kommandos -1 zurück, wenn ein Syntaxfehler beim
  102. Aufruf oder ein anderer Fehler aufgetreten ist, und 0, wenn bei der Aus-
  103. führung keine Fehler aufgetreten sind. Daher werden die Rückgabewerte der
  104. internen Kommandos im folgenden nur angeführt, wenn sie von dieser Konven-
  105. tion abweichen.
  106.  
  107.  
  108. Folgende interne Kommandos sind implementiert:
  109.  
  110.  
  111. -----
  112. . - Ausführung einer Datei als Shellscript
  113.  
  114. Syntax: . Dateiname
  115.  
  116. Die angegebene Datei wird als Shellscript ausgeführt. Es muß der voll-
  117. ständige Dateiname (relativ oder absolut) angegeben werden. Die Shell-
  118. variablen PATH und SEXT sind ohne Wirkung.
  119. Beispiele:
  120.     . $HOME\profile
  121.         führt das Login-Script aus.
  122.     . hallo.sh
  123.         führt die Datei hallo.sh als Shellscript aus.
  124.     . hallo
  125.         führt die Datei hallo als Shellscript aus.
  126.  
  127. -----
  128. [ - SIEHE test
  129.  
  130. -----
  131. adr - Ausgabe von diversen Systemadressen
  132.  
  133. Syntax: adr
  134.  
  135. Ausgabe der folgenen Adressen:
  136.     argv        Adresse des Argumentenvektors der Shell
  137.     Command line    Adresse der Kommandozeile (Parameter)
  138.     Environment    Adresse des Environment-Strings der Shell
  139.     VarTable    Adresse der Variablen-Tabelle der Shell
  140.     Commands    Adresse der Kommandotabelle der Shell
  141.     AdrTab        Adresse der Tabelle mit den auszugebenden Adressen
  142.     Physbase    Adresse des physikalischen Bildschirms
  143.     Logbase     Adresse des logischen Bildschirms
  144.     DTA        Adresse des Disk-Transfer-Bereiches
  145.     Phystop     Physikalisches Ende des RAM-Speichers
  146.             (Adresse des ersten nicht vorhandenen Bytes)
  147.     Membot        Unterste Adresse des verfügbaren Speichers
  148.     Memtop        Oberste Adresse des verfügbaren Speichers
  149.     Basepage    Adresse der Basepage der Shell
  150.     Cookie Jar    Die Adresse des Cookie Jars.
  151.     _StdIn        Adresse der aktuellen Eingabe-File-Struktur.
  152.     _StdOut        Adresse der aktuellen Ausgabe-File-Struktur.
  153.     _StdErr        Adresse der aktuellen Fehlerausgabe-File-Struktur.
  154.  
  155. Diese Adressen sind z.T. nur für den Programmierer der Shell von Bedeu-
  156. tung (z.T nicht mal das). Die Inhalte der Adressen können mit memex ausge-
  157. lesen werden.
  158.  
  159. Siehe auch:    basep
  160.         cookie
  161.  
  162. -----
  163. backup - Sichern von Dateien auf Diskette
  164.  
  165. Syntax: backup [-nNrq] [Laufwerk]
  166.  
  167. Dient zum Sichern von Dateien auf Diskette. Es werden von StdIn Datei-
  168. namen eingelesen. Diese Dateien werden auf dem angegebenen Laufwerk oder,
  169. falls kein Laufwerk angegeben ist, nach A:\ gespeichert. Dabei werden alle
  170. benötigten Ordner angelegt.
  171. Alle von StdIn eingelesenen Zeilen werden als Dateinamen betrachtet, mit
  172. der Ausnahme von Zeilen, die mit einem Doppelkreuz (#) beginnen. Diese
  173. werden als Kommentarzeilen betrachtet. Leerzeilen werden ignoriert.
  174. Wenn auf dem Ziellaufwerk kein Platz mehr für weitere Dateien ist, fragt
  175. backup nach der nächsten Diskette. Die Anfrage wird durch Druck auf ENTER
  176. beantwortet; drückt man stattdessen ESC, wird backup abgebrochen.
  177. Die laufende Nummer der jeweiligen Diskette wird im Bootsektor der
  178. Diskette abgelegt (nur bei Disketten, also Laufwerk A: oder B:.)
  179. Nach dem Ende des Backups wird die Anzahl der Dateien, Bytes und benutzter
  180. Disketten ausgegeben.
  181.  
  182. Flags:
  183.     -n    Es werden keine Daten in den Bootsektor geschrieben.
  184.     -N    Es werden keine Daten kopiert. Das ist nützlich, um
  185.         herauszufinden, wieviele Disketten für ein Backup be-
  186.         nötigt werden. Die Disketten müssen in der vorgesehenen
  187.         Reihenfolge eingelegt werden, werden aber nicht beschrieben.
  188.         Impliziert -n.
  189.     -r    Es werden keine Ordner auf dem Ziellaufwerk angelegt, alle
  190.         Dateien landen im Wurzelverzeichnis des Ziellaufwerks.
  191.     -q    Es wird angenommen, daß die erste Diskette bereits im Lauf-
  192.         werk eingelegt ist, daher entfällt die Frage nach dem
  193.         Einlegen der ersten Diskette. Dies ist nützlich, wenn Daten
  194.         statt auf eine Diskette auf eine Festplatte gesichert
  195.         werden.
  196.  
  197.  
  198. Beispiele:
  199.     backup <files.lst
  200.         Aus der Datei files.lst werden Namen von Dateien gelesen,
  201.         die auf Diskette A: gesichert werden. Die Datei files.lst
  202.         kann Kommentarzeilen enthalten, die mit # beginnen.
  203.  
  204.     find d:\ *.* | backup
  205.         sichert alle Dateien von Partition D: auf Diskette A:.
  206.  
  207.     ls *.c | backup -q e:\backup\source
  208.         sichert alle C-Quelldateien vom aktuellen Directory in
  209.         das Directory e:\backup\source. Da E: keine Diskette
  210.         ist, werden keine Daten in den Bootsektor geschrieben.
  211.         Es erfolgt keine Nachfrage zum Einlegen einer Diskette.
  212.  
  213.     find e:\ *.c | backup -N b:
  214.         findet heraus, wieviele Disketten zum Sichern aller C-
  215.         Quelldateien von Partition E: benötigt würden. Es wird
  216.         Diskettenlaufwerk B: benutzt.
  217.  
  218. Rückgabewert:
  219.     -1    Aufruffehler
  220.     sonst    Anzahl der gesicherten Dateien.
  221.  
  222. -----
  223. basename - Ermitteln des Dateinamens
  224.  
  225. Syntax: basename File [Extender]
  226.  
  227. Ausgabe des reinen Dateinamens ohne Laufwerk und Ordner. Wenn ein Extender
  228. angegeben wird und der Dateiname mit diesem Extender endet, wird der Basis-
  229. name ohne diesen Extender ausgegeben. Datei muß es sich nicht unbedingt um
  230. den 3-Zeichen-TOS-Dateitypextender handeln, sondern um eine beliebig lange
  231. Zeichenkette, die vom Ende des Basisnamens abgeschnitten wird.
  232.  
  233. Beispiele:                     ergibt:
  234.     basename d:/shell/sh.ttp         sh.ttp
  235.     basename sh.ttp                sh.ttp
  236.     basename d:/shell/sh.ttp .ttp        sh
  237.     basename d:/compiler iler        comp
  238.  
  239. Anmerkung: Die Arbeitsweise dieses Kommandos hängt in keiner Weise davon ab,
  240. ob die angegebene Datei existiert. Das gilt auch für die Kommandos dirname,
  241. drvname, extname und fullname.
  242.  
  243. Siehe auch: dirname
  244.         drvname
  245.         extname
  246.         fullname
  247.  
  248. -----
  249. basep - Analyse der Basepage
  250.  
  251. Syntax: basep [-pa] [Adresse]
  252.  
  253. Mit diesem Kommando kann:
  254. 1) die Adresse der Basepage des Shell-Programms herausgefunden werden,
  255. 2) diese oder eine andere Basepage analysiert werden,
  256. 3) wahlweise stattdessen die Adresse der Parent-Basepage gefunden oder
  257.    diese analysiert werden.
  258.  
  259. Hierbei bedeutet "analysiert", daß die einzelnen in der Basepage enthaltenen
  260. Adressen und sonstigen Angaben ausgegeben werden.
  261.  
  262. Wenn keine Adresse angegeben ist, wird die Basepage des aktuellen Shell-
  263. Programms benutzt.
  264.  
  265. Bei der Analyse werden alle Angaben, auch die Längenangaben der einzelnen
  266. Programmsegmente, in hexadezimaler Schreibweise ausgegeben. Das interne
  267. Kommando num kann für die Konvertierung in dezimale Schreibweise benutzt
  268. werden.
  269.  
  270. Flags:
  271.     -a    Wenn dieses Flag angegeben ist, wird die Analyse der Base-
  272.         page ausgegeben. Ansonsten wird nur die Adresse ausgegeben.
  273.     -p    Wenn dieses Flag angegeben ist, wird die Parent-Basepage
  274.         benutzt.
  275.  
  276. Beispiele:
  277. 1) Herausfinden der aktuellen Basepage-Adresse:
  278.     basep
  279.  
  280. 2) wie 1), aber Umformung ins Dezimalsystem:
  281.     basep | xargs num -d
  282.  
  283. 3) Herausfinden der Adresse der Basepage des aufrufenden Programms:
  284.     basep -p
  285.  
  286. 4) Analyse der Basepage an Adresse 0x65A40:
  287.     basep -a 0x65a40
  288.    Diese Adresse kann z.B. von dem Kommando exec oder ps stammen.
  289.  
  290. Siehe auch:    exec
  291.         ps
  292.  
  293. -----
  294. bombs - Erzeugen von Bomben
  295.  
  296. Syntax: bombs Anzahl
  297.  
  298. Mit diesem Kommando wird die Shell mit der angegebenen Anzahl von Bomben
  299. beendet. Die Anzahl muß größer oder gleich 2 sein. Es erfolgt ein Sprung
  300. an die Adresse, die in dem entsprechenden Vektor (Adresse 4*Anzahl) ange-
  301. geben ist.
  302. Dieses Kommando kann z.B. benutzt werden, um einen Debugger oder eine Umlen-
  303. kung der Exception-Vektoren zu testen.
  304.  
  305. -----
  306. break - SIEHE while
  307.  
  308. -----
  309. cat - Anzeige von Dateien
  310.  
  311. Syntax: cat [-b] {File}
  312.  
  313. Kopiert Daten von StdIn oder, falls angegeben, von File, nach StdOut.
  314. Falls StdIn die Tastatur ist, kann die Ausgabe durch die Tastenkombination
  315. Ctrl D ENTER abgebrochen werden.
  316.  
  317. Wenn das Flag -b angegeben ist, werden die Dateien im Binärmodus geöffnet,
  318. es findet also keine Übersetzung von CR/LF-Sequenzen statt. Das ist sinn-
  319. voll, wenn man Binärdateien wie z.B. ausführbare Programmdateien o.ä. an-
  320. einanderhängen will. Damit das funktioniert, sollte man dann aber auch
  321. das Shell-Flag u setzen (siehe "set").
  322.  
  323. Bsp.:
  324. 1) cat test.dat
  325. gibt den Inhalt der Datei test.dat auf dem Bildschirm aus.
  326.  
  327. 2) cat test.dat >PRT:
  328. druckt die Datei test.dat aus.
  329.  
  330. 3) cat dat.1 dat.2 dat.3 > dat.123
  331. hängt die Dateien dat.1 bis dat.3 aneinander und schreibt das Ergebnis
  332. in die Datei dat.123.
  333.  
  334. 4) set +u
  335.    cat -b test1.prg test2.prg >test.bin
  336. arbeitet im Binärmodus, wodurch keine Übersetzung von CR/LF-Sequenzen in
  337. den Dateien stattfindet.
  338.  
  339. Fehler:
  340. Die Verwendung von "cat >file", um Tastatureingaben in eine Datei zu schrei-
  341. ben, ist nicht möglich, da bei der Eingabe auch das Tastaturecho in die Datei
  342. umgeleitet würde.
  343.  
  344. Siehe auch:    raw
  345.  
  346. -----
  347. cd - Wechsel des aktuellen Directories
  348.  
  349. Syntax: cd [Pfad]
  350.  
  351. Setzt das aktuelle Arbeitsverzeichnis auf $HOME oder, falls angegeben,
  352. auf Pfad. Pfad kann erweiterte Wildcards enthalten.
  353. Wenn Pfad nicht mit einem Backslash (\ oder /) beginnt oder ein entsprechendes
  354. Verzeichnis nicht existiert, werden die in der Shellvariablen CDPATH gespei-
  355. cherten Pfade nach einem entsprechenden Verzeichnis durchsucht. Das aktuelle
  356. Arbeitsverzeichnis wird dann auf das erste gefundene Verzeichnis eingestellt.
  357.  
  358. Beispiele:
  359.     cd
  360.         entspricht cd $HOME
  361.     cd e:\okami\test
  362.         Wechsel von Laufwerk und Verzeichnis
  363.     cd test
  364.         Wechsel in den Ordner "test" im aktuellen Verzeichnis
  365.     cd ..
  366.         Wechsel ins Parent-Directory des aktuellen Verzeichnisses
  367.     cd t*
  368.         Wechsel in den ersten Ordner, dessen Name mit t beginnt
  369.  
  370. -----
  371. chmod - Ändern von Dateiattributen
  372.  
  373. Syntax: chmod [(+|-)cdrhsvw] File
  374.  
  375. Flags: Bei Verwendung von + wird das entsprechende Flags gesetzt, bei
  376.        Verwendung von - wird es geloescht. Die Flags bedeuten:
  377.     c    File written and closed (Archivstatus)
  378.     d    Directory        (Ordner)
  379.     r    Read-Only        (nur lesen)
  380.     h    Hidden            (unsichtbar; nur für Dateien)
  381.     s    System File        (Systemdatei)
  382.     v    Volume Lable        (Diskettenname)
  383.  
  384. Die Flags können beliebig kombiniert werden, allerdings geben nicht alle
  385. Kombinationen einen Sinn. VORSICHT!!!!
  386. Das Unsichtbarmachen von Ordnern ist nicht möglich. Wenn eine Datei einmal
  387. das Volume Label-Flag hat, kann dieses nicht mehr entfernt werden, da die
  388. Datei dadurch von der normalen Dateisuche (Fsfirst/next) ausgeschlossen ist.
  389.  
  390. -----
  391. cls - Bildschirm initialisieren
  392.  
  393. Syntax: cls
  394.  
  395. Loescht den Bildschirm, setzt den Cursor auf die erste Spalte in der
  396. ersten Zeile und schaltet den Cursor auf sichtbar. Außerdem wird das
  397. Word Wrap angeschaltet, das dafür sorgt, daß Ausgaben, die länger sind
  398. als eine Zeile (z.B. bei Verwendung von ls -C) auf mehrere Zeilen ver-
  399. teilt werden.
  400.  
  401. -----
  402. cmds - Ausgabe der internen Kommandos
  403.  
  404. Syntax: cmds [-Ca] {Pattern}
  405.  
  406. Es werden die Namen aller interner Kommandos ausgegeben, die auf die ange-
  407. gebenen Patterns passen. Dabei gelten die Regeln der erweiterten Wildcards
  408. (siehe okami.doc). Wenn kein Pattern angegeben ist, werden alle internen
  409. Kommandos ausgegeben.
  410.  
  411. Flags:
  412.     -C    Die Kommandos werden in mehreren Spalten ausgegeben. Auf diese
  413.         Weise passen alle Kommandos auf einmal auf den Bildschirm.
  414.     -a    Es werden außerdem die Startadressen der jeweiligen
  415.         Funktionen ausgegeben (ja, für den Anwender ist das
  416.         VÖLLIG uninteressant)
  417.  
  418. Beispiele:
  419.     cmds        Ausgabe aller interner Kommandos
  420.     cmds -a t*    Ausgabe aller Komandos, die mit t beginnen, sowie
  421.             die Startadressen.
  422.     cmds [abcd]*e    Ausgabe aller Kommandos, die mit a,b,c oder d beginnen
  423.             und mit e aufhören.
  424.     cmds | wc -l    Ausgabe der Anzahl der internen Kommandos.
  425.  
  426. Rückgabewert: Es wird die Anzahl der ausgegebenen Kommandos zurückgegeben.
  427.  
  428. -----
  429. continue - SIEHE while
  430.  
  431. -----
  432. cookie - Auslesen des Cookie-Jars
  433.  
  434. Syntax: cookie [-xdn0sc] {cookie}
  435.  
  436. Mit diesem Kommando kann der Cookie-Jar des Betriebssystems ausgelesen werden.
  437. Der Cookie-Jar wird erst ab TOS 1.6 vom Betriebssystem selber genutzt, kann
  438. aber (was die Okami-Shell tut) in allen früheren TOS-Versionen einfach in-
  439. stalliert werden.
  440. In dem Cookie-Jar können sich Programme mit einer Namenskennung und einer
  441. Versionsnummer eintragen. Die Kennung ist genau 4 Bytes lang, belegt also ge-
  442. nau wie die Versionenummer ein Langwort (32 bit). Die Kennung der Okami-Shell
  443. ist "OkSh", die Versionsnummer enthält bei Version 1.2 eine 1 im oberen und
  444. eine 2 im unteren Byte des ersten Wortes (ist also 0x102).
  445.  
  446. Es werden alle Cookies ausgegeben, die auf die angeführten Parameter passen,
  447. wobei dieselben Regeln wie für die erweiterten Wildcards gelten (siehe 
  448. okami.doc). Wenn keine Parameter angegeben sind, lautet die Defaulteinstellung
  449. "*", es werden also alle Cookies ausgegeben.
  450.  
  451. Der Rückgabewert ist die Anzahl der so gefundenen Cookies. Das Kommando kann
  452. dadurch benutzt werden, um das Vorhandensein eines bestimmten Cookies nachzu-
  453. prüfen.
  454.  
  455. Flags:
  456.     -x    Die Versionsnummer wird hexadezimal ausgegeben.
  457.     -d    Die Versionsnummer wird dezimal ausgegeben.
  458.     -n    Die Versionsnummer wird in der Form x.y ausgegeben, wobei
  459.         x das obere und y das untere Byte des ersten Wortes darstellt.
  460.         x und y    werden dabei dezimal ausgegeben.
  461.         Dies ist die Default-Einstellung, wenn keine anderen Flags
  462.         angegeben sind.
  463.     -0    Es erfolgt keine Ausgabe. Ist nützlich beim Testen, siehe 
  464.         untenstehendes Beispiel.
  465.     -s    Es wird außerdem eine Statistikangabe über freie und belegte
  466.         Plätze im Cookie-Jar ausgegeben.
  467.     -c    Wenn dieses Flag angegeben ist, wird ein neuer Cookiejar ange-
  468.         legt, in den die Shell sich einträgt. Dabei wird ein evtl.
  469.         vorhandener Cookiejar überschrieben. Man sollte dieses Flag
  470.         nur benutzen, wenn der Verdacht besteht, daß eine unzulässige
  471.         Adresse als Basisadresse des Cookiejar eingetragen ist (z.B.
  472.         von einem weggebombtem Programm, das keine Zeit mehr hatte,
  473.         die Adresse zu entfernen).
  474.         Dieses Flag sollte nur in Notfällen angewandt werden. Wenn
  475.         ein früheres Programm, von dem aus die Shell gestartet wurde,
  476.         einen Cookiejar anlegt und mit cookie -c diese Adresse ver-
  477.         ändert wird, das Programm das aber nicht bemerkt, kann das
  478.         zum Absturz dieses Programmes führen, wenn es versucht, den
  479.         betreffenden Speicherbereich wieder freizugeben. (Die Okami-
  480.         Shell ist gegen solche Vorfälle geschützt.)
  481.  
  482. Es kann nur eins der Flags x, d, n angegeben werden. Wenn mehrere dieser Flags
  483. angegeben sind, gilt nur das zuerst stehende.
  484.  
  485. Beispiele:
  486.     cookie
  487.                 Ausgabe aller installierten Einträge.
  488.     cookie -s [A-Z]*
  489.                 Ausgabe aller Einträge, die mit einem Groß-
  490.                 buchstaben beginnen. Außerdem wird die Sta-
  491.                 tistik ausgegeben.
  492.     cookie -x OkSh
  493.                 Ausgabe des Okami-Cookies in hexadezimal.
  494.     if cookie -0 MiNT
  495.     then
  496.       echo MiNT ist installiert.
  497.     else
  498.       echo MiNT ist nicht installiert.
  499.     fi
  500.                 Findet heraus, ob Mint installiert ist. Das
  501.                 cookie-Kommando erzeugt in dieser Form keine
  502.                 Ausgabe.
  503.  
  504. Rückgabewert: -2, wenn kein Cookie-Jar installiert ist (was nicht geschehen
  505. dürfte), -1 bei einem Syntaxfehler, sonst die Anzahl der gefundenen Cookies.
  506.  
  507. Die Basisadresse des aktuellen Cookie-Jars kann mit dem Kommando "adr" er-
  508. mittelt werden.
  509.  
  510. -----
  511. cp - Kopieren von Dateien
  512.  
  513. Syntax: cp Source Dest
  514.  
  515. Kopiert die Datei Source in die Datei Dest. Falls bereits vorhanden, wird
  516. Dest überschrieben. Falls Dest der Name eines existierenden Ordners ist,
  517. wird Source nach Dest\`basename Source` kopiert.
  518.  
  519. Beispiele:
  520. 1) cp msh.tos msh.prg        (Kopieren einer Datei)
  521. 2) cp okami\sh.ttp d:\shell    (Kopieren in einen Ordner unter
  522.                  Beibehaltung des Dateinamens; erzeugt
  523.                  wird d:\shell\sh.ttp)
  524.  
  525. -----
  526. crypt - Ver- und Entschlüsseln von Daten
  527.  
  528. Syntax: crypt [Schlüssel]
  529.  
  530. crypt liest Daten von StdIn, verschlüsselt sie mit dem angegebenen Schlüssel
  531. und schreibt das Ergebnis nach StdOut. Wenn kein Schlüssel angegeben ist, wird
  532. der Schlüssel des vorigen crypt-Aufrufes benutzt (was allerdings nicht allzu
  533. zuverlässig funktioniert, man sollte daher immer einen Schlüssel angeben).
  534. Durch erneutes Verschlüsseln werden die Daten wieder entschlüsselt.
  535.  
  536. Benutzt wird der Verschlüsselungsalgorithmus von MicroEmacs, was bedeutet, daß
  537. die Verschlüsselung kompatibel ist zu allen MicroEmacs-Versionen auf allen
  538. Rechnern. Die in der Okami-Shell verwendete Verschlüsselungsroutine stammt
  539. aus den Quellen von MicroEmacs 3.9+.
  540.  
  541. Der Verschlüsselungsalgorithmus ist so angelegt, daß druckbare Ascii-Zeichen
  542. wieder in solche verschlüsselt werden. Steuerzeichen (Ascii<32 oder >127)
  543. werden nicht verändert. Dadurch ist die Verschlüsselung einer reinen Ascii-
  544. Datei wieder eine reine Ascii-Datei.
  545.  
  546. Beispiele:
  547.     crypt xyz <secret.txt >secret.crp
  548.         verschlüsselt die Datei secret.txt und speichert das Ergebnis
  549.         in der Datei secret.crp. Es wird der Schlüssel "xyz" benutzt.
  550.     crypt xyz <secret.crp
  551.         entschlüsselt secret.crp und gibt das Ergebnis auf dem Bild-
  552.         schirm aus.
  553.     crypt abc <secret.txt | crypt abc
  554.         hat dieselbe Wirkung wie "cat secret.txt".
  555.     ls -la *.c | crypt dubidu | hd
  556.         erzeugt eine Dateiliste, verschlüsselt sie mit dem Schlüssel
  557.         "dubidu" und fertigt von dem Ergebnis ein Hexdump an.
  558.     crypt abc secret.txt
  559.         verschlüsselt die Tastatureingabe anhand des Schlüssels
  560.         "abc secret.txt".
  561.  
  562. -----
  563. cursor - Konfiguration des VT52-Cursors
  564.  
  565. Syntax: cursor [(+|-)bv] [Rate]
  566.  
  567. Beim Aufruf ohne Parameter wird die aktuelle Blinkrate nach StdOut ge-
  568. schrieben.
  569. Wenn Rate angegeben wird, wird die Blinkrate auf Rate gesetzt. Werte für
  570. Rate: 30 normal, <30: schneller, >30: langsamer, 0: nicht blinkend.
  571. Flags: +v    der Cursor wird sichtbar.
  572.        -v    der Cursor wird unsichtbar.
  573.        +b    der Cursor wird blinkend.
  574.        -b    der Cursor hört auf zu blinken (unabhängig von Rate).
  575.  
  576. Beispiel:
  577. Der Cursor soll während der Ausführung eines Programms schneller blinken
  578. und dann auf den alten Wert zurückgestellt werden.
  579.  
  580.     ALT=`cursor`
  581.     cursor 5
  582.     .....................    (das auszuführende Programm)
  583.     cursor $ALT
  584.     ALT=
  585.  
  586. Rückgabewert: der Ascii-Code des ersten eingegebenen Zeichens.
  587.  
  588. Siehe auch:    keyb
  589.         mouse
  590.         scr
  591.  
  592. -----
  593. date - Ausgabe der Systemzeit
  594.  
  595. Syntax: date [+Fmt]
  596.  
  597. Datum und Uhrzeit werden nach StdOut geschrieben.
  598. Wenn ein mit einem Pluszeichen eingeleiteter Formatstring angegeben ist,
  599. wird das Datum in dem angegebenen Format ausgegeben. In dem Formatstring
  600. können Formatelemente enthalten sein, die folgendes bedeuten:
  601.  
  602.     %d    Nummer des Tages im Monat (00...31)
  603.     %h    Abkürzung des Monatsnamens (Jan...Dec)
  604.     %H    Stunde (00...23)
  605.     %m    Nummer des Monats (00...12)
  606.     %M    Minute (00.59)
  607.     %n    erzeugt einen Zeilenvorschub
  608.     %S    Sekunde (00...59)
  609.     %t    erzeugt einen Tabulatorvorschub
  610.     %y    Jahr zweistellig (00...99)
  611.     %Y    Jahr vierstellig (1900...????)
  612.     %%    erzeugt ein Prozentzeichen
  613.  
  614. Alle anderen Zeichen werden direkt ausgegeben.
  615.  
  616. Wenn kein Formatstring angegeben ist, lautet die Voreinstellung:
  617.     date +%d.%m.%Y %H:%M:%S
  618.  
  619. Beispiele:
  620.     Eingabe...            Ausgabe... (z.B.)
  621.     date                06.09.1990 21:38:07
  622.     date +Das Jahr ist %Y        Das Jahr ist 1990
  623.     date +%h. %dth, %Y        Sep. 06th, 1990
  624.     date +Hallo, wie gehts        Hallo, wie gehts
  625.  
  626. -----
  627. df - Anzeige der Plattenbelegung
  628.  
  629. Syntax: df [-dnmb] {Drive}
  630.  
  631. Gibt Informationen über freie und belegte Bytes und Cluster auf allen
  632. angemeldeten Laufwerken oder, wenn Drive angegeben ist, nur von Laufwerk
  633. Drive. Nur der erste Buchstabe von Drive ist relevant, d.h. für Informa-
  634. tionen über Laufwerk A: genügt: df a
  635.  
  636. Flag:    -d    Es werden für jedes Laufwerk folgende Daten ausgegeben:
  637.             Anzahl der Cluster,
  638.             Anzahl der Sektoren pro Cluster,
  639.             Anzahl der Bytes pro Sektor,
  640.             Anzahl der freien Cluster.
  641.         Dies entspricht der Rückgabe der Gemdos-Funktion Dfree.
  642.     -n    Es wird keine Überschrift ausgegeben.
  643.     -m    Es wird eine Liste der angeschlossenen Laufwerke ausge-
  644.         geben. -n und -d sind ohne Wirkung.
  645.     -b    Wenn nur ein Laufwerk angeschlossen ist, das sowohl als
  646.         A: als auch als B: angesprochen werden kann, werden, wenn
  647.         dieses Flag angegeben ist, bei der Übersicht (auch bei -m)
  648.         die Angaben von A: und von B: ausgegeben (wenn -m nicht
  649.         angegeben ist, ist also ein Diskettenwechsel nötig). Wenn
  650.         -b nicht angegeben ist, werden, wenn nur ein Disketten-
  651.         laufwerk vorhanden ist, keine Angaben über Laufwerk B:
  652.         ausgegeben (auch nicht bei -m).
  653.  
  654. Rückgabewert: (nur für df -m)
  655.     -1    Aufruffehler.
  656.     sonst    Anzahl der ausgegebenen Laufwerke.
  657.  
  658. -----
  659. dirname - Ermitteln des Pfades
  660.  
  661. Syntax: dirname file
  662.  
  663. Es wird der Pfad der Datei ausgegeben.
  664. Bsp: dirname a:\okami\sh.ttp ergibt a:\okami.
  665.  
  666. Siehe auch: basename
  667.         drvname
  668.         extname
  669.         fullname
  670.  
  671. -----
  672. do - SIEHE while
  673.  
  674. -----
  675. done - SIEHE while
  676.  
  677. -----
  678. drive - Festlegen und Auslesen der Laufwerksbezeichnungen
  679.  
  680. Syntax: drive ["Drive {Drive}" [String]]
  681.  
  682. Mit diesem Kommando kann jedem Laufwerk eine Bezeichnung zugeordnet werden.
  683. Diese Bezeichnung wird z.B. von dem internen Kommando df ausgegeben.
  684. Wenn keine Parameter angegeben sind, werden alle vorhandenen Bezeichnungen
  685. ausgegeben.
  686. Wenn nur ein Parameter (d.h. ein einziges Wort, ggfs. in doppelten Anführungs-
  687. zeichen) angegeben ist, so wird jeder Buchstabe dieses Wortes als Laufwerk be-
  688. trachtet und die Bezeichnung dieses Laufwerks ausgegeben. Zeichen außer A bis
  689. Z und a bis z werden dabei ignoriert.
  690. Wenn ein String ausgegeben ist, wird dieser jedem der angegebenen Lauf-
  691. werke als Laufwerksbezeichnung zugeordnet.
  692.  
  693. Beispiele:
  694. 1) Ausgabe aller Laufwerksbezeichnungen:
  695.     drive
  696.  
  697. 2) Ausgabe der Bezeichnung von Laufwerk A:
  698.     drive A:
  699.    oder
  700.     drive a
  701.  
  702. 3) Ausgabe der Bezeichnungen der Laufwerke A,C und G:
  703.     drive acg
  704.    oder
  705.        drive "A: C: G:"
  706.  
  707. 4) Setzen der Bezeichnung "Diskette" für Laufwerk A:
  708.     drive a Diskette
  709.  
  710. 5) Setzen der Bezeichnung "Platte" für Laufwerke C bis F:
  711.     drive cdef Platte
  712.    oder
  713.     drive "C D E F" Platte
  714.  
  715. Eine weitere Möglichkeit, die Laufwerksbezeichnungen zu initialisieren,
  716. ist das interne Kommando rdti, das die Bezeichnungen direkt aus der
  717. desktop.inf-Datei lädt.
  718.  
  719. -----
  720. drvname - Ermitteln des Laufwerks
  721.  
  722. Syntax: drvname file
  723.  
  724. Es wird der Name des Gerätes von file ausgegeben.
  725. Bsp: drvname a:\okami\sh.ttp ergibt a:.
  726.  
  727. Siehe auch: basename
  728.         dirname
  729.         extname
  730.         fullname
  731.  
  732. -----
  733. echo - Ausgabe eines Strings
  734.  
  735. Syntax: echo String
  736.  
  737. Schreibt String nach StdOut. String kann leer sein, d.h. echo ohne Para-
  738. meter schreibt eine Leerzeile nach StdOut.
  739. In dem String sind folgende Sonderzeichen erlaubt:
  740. ^n    erzeugt ein Newline-Zeichen (in C: '\n')
  741. ^t    erzeugt ein Tabulator-Zeichen (in C: '\t')
  742. ^ooo    wobei ooo eine dreistellige Oktalzahl ist: erzeugt das Zeichen
  743.     mit dem Ascii-Code ooo.
  744.     Beipiel: echo ^033pHallo^033q schreibt Hallo in invertierter Schrift.
  745. ^;    erzeugt ein Semikolon, das nicht als Trenner von Kommandos wirkt.
  746.     Siehe unten.
  747. ^>
  748. ^<
  749. ^|
  750. ^`    erzeugen analog dazu Größer-, Kleiner-, Pipe- und Accent Grave-Zei-
  751.     chen, die nicht    die Ein/Ausgabeumleitung bzw. Command Substitution
  752.     bewirken.
  753. ^c    am Ende des Strings verhindert den Zeilenvorschub, d.h. der Cursor
  754.     bleibt am Ende der Zeile.
  755. ^x    wobei x ein beliebiges Zeichen ausser n, t, c, 0..7 ist: erzeugt
  756.     das Zeichen x. Dies ist nuetzlich zum Beenden von Variablenauf-
  757.     rufen. Beispiel:
  758.  
  759.     VAR=Halli
  760.     echo $VARHallo        gibt den Wert der Variable VARHallo aus
  761.     echo $VAR^Hallo     gibt die Ausgabe HalliHallo.
  762.  
  763. ^^    erzeugt ein Hoch-Zeichen.
  764.  
  765. Achtung: Whitespace-Zeichen wie ^t und ^n müssen in doppelten Anführungs-
  766. zeichen (") stehen, um wirksam zu werden.
  767.  
  768. Diese Sonderzeichen gelten nicht nur bei der Angabe von Parametern des echo-
  769. Kommandos, sondern für alle Kommandos.
  770.  
  771. Das Hoch-Zeichen hat also die Funktion, die im herkoemmlichen UNIX-"echo"
  772. der Backslash hat. Unter TOS wird der Backslash allerdings (in MS-DOS-
  773. Konvention) als Trennzeichen zwischen Pfad(en) und Dateinamen benutzt
  774. (wofür es in UNIX den normalen Slash gibt). Daher wird in der Okami-Shell
  775. der Backslash durch das Hoch-Zeichen ersetzt. Deswegen muß man in der
  776. Okami-Shell darauf verzichten, das Hoch-Zeichen anstelle des Pipe-Symbols
  777. (|) zu benutzen, was in Unix teilweise üblich ist.
  778. (Fazit: Es ist nicht leicht, MS-DOS und Unix unter einen Hut zu bringen,
  779. und TOS ist eine unmögliche Mischung von beidem)
  780.  
  781. Beispiele:
  782.  
  783. 1) Ausgabe des aktuellen Directories:
  784.     echo Das aktuelle Directory ist $CWD
  785.         
  786. 2) Ausgabe von VT52-Sequenzen:
  787.     echo ^033e        schaltet den Cursor ab
  788.     echo ^033H        setzt den Cursor auf Home-Position etc.
  789.  
  790. 3) Ausgabe eines Semikolons:
  791.     echo Hallo ; ls -l    schreibt "Hallo" und führt das Kommando
  792.                 "ls -l" aus.
  793.     echo Hallo ^; ls -l    schreibt "Hallo ; ls -l".
  794.  
  795. 4) Benutzung der Sonderzeichen in anderen Shellkommandos: Einstellen eines
  796.    Shellprompts, das aus dem String "Eingabe: >" in invertierter Schrift
  797.    besteht; vor jedem Prompt soll ein Signalton erzeugt werden.
  798.     PS1="^007^033pEingabe: ^>^033q"
  799.  
  800. -----
  801. else - SIEHE if
  802.  
  803. -----
  804. errcode - Analyse von Fehlernummern
  805.  
  806. Syntax: errcode {Fehlernummer|errno}
  807.  
  808. errcode liefert zu einer Bios-, XBios- oder Gemdos-Fehlernummer einen er-
  809. klärenden Text. Als Fehlernummer kan jede beliebige Zahl oder das Wort
  810. "errno" angegeben sein, in letzterem Fall wird der Wert der internen Fehler-
  811. variablen errno benutzt. Fehlernummern können positiv oder negativ angegeben
  812. werden; da das Betriebssystem nur negative Fehlernummern benutzt, werden posi-
  813. tive Nummern negiert. Die Ausgabe hat die Form
  814.     Nummer: Text
  815. Die Nummer wird dezimal ausgegeben und entspricht dem jeweiligen Parameter
  816. oder dem Inhalt von errno. Der Text ist eine Kurzdefinition der Nummer. Bei
  817. einer unbekannten Nummer lautet der Text "???".
  818. Die Voreinstellung, wenn keine Parameter angegeben sind, lautet "errno".
  819.  
  820. -----
  821. exec - Ausführen einer Datei als Binärprogramm
  822.  
  823. Syntax: exec [-(l|b)g] Dateiname {Parameter}
  824. oder    exec -x Dateiname Basepage-Adresse
  825.  
  826. Dient zum Laden oder Starten einer Datei als Binär-Programmdatei. Entspricht
  827. der Gemdos-Funktion "Pexec".
  828. Es muß der vollständige Dateiname (relativ oder absolut) angegeben werden.
  829. Die Shellvariablen PATH und XEXT sind ohne Wirkung. Die Shellvariable GEXT
  830. entscheidet, ob das Programm als GEM-Programm starten soll. Wenn das Flag -g
  831. angegeben ist, wird das Programm nicht über die Shellfunktion gemexec ausge-
  832. führt, auch wenn der Extender in $GEXT aufgeführt ist. Dies ist die Art und
  833. Weise, mit der gemexec Programme ausführt.
  834.  
  835. Achtung: Wenn Flags angegeben sind, so müssen sie zu Beginn, also vor dem
  836. Dateinamen stehen und dürfen nicht durch Leerzeichen getrennt sein.
  837.  
  838. Beispiele:
  839. 1)    exec datei.ttp p1 p2 p3
  840.         lädt und startet die Datei datei.ttp im aktuellen Verzeich-
  841.         nis. Der String "p1 p2 p3" wird als Parameterzeile über-
  842.         geben.
  843. 2)    exec datei.prg
  844.         Wenn der Extender .prg in der Shell-Variablen GEXT gespeichert
  845.         ist, wird die Datei datei.prg über die Shellfunktion gemexec
  846.         ausgeführt, ansonsten wird sie geladen und gestartet.
  847. 3)    exec -g datei.prg
  848.         Die Datei datei.prg wird geladen und gestartet, auch wenn der
  849.         Extender .prg in GEXT gespeichert ist. Die Funktion gemexec
  850.         wird also nicht aufgerufen.
  851. 4)    exec datei.prg -g
  852.         wie 2), aber es wird die Zeichenkette "-g" an das Programm
  853.         übergeben.
  854. 5)    exec -l datei.ttp p1 p2 p3
  855.         Die Datei wird geladen. Die Startadresse der Basepage des
  856.         Programms wird in hexadezimaler Schreibweise auf den Bild-
  857.         schirm geschrieben. Der String "p1 p2 p3" wird als Para-
  858.         meterzeile in die Basepage eingetragen. Die Adresse der
  859.         Basepage kann mit exec -x oder dem Kommando basep weiter-
  860.         verarbeitet werden.
  861. 6)    exec -b datei.ttp p1 p2 p3
  862.         wie 2), aber es wird die Basepage des Programms erzeugt.
  863. 7)    exec -x datei.ttp 0x65abc
  864.         Die zuvor mit exec -l geladene Datei datei.ttp wird ge-
  865.         startet. exec -l sollte die Ausgabe "0x65ABC" erzeugt ha-
  866.         ben.
  867.  
  868. VORSICHT: Wenn bei der Verwendung von exec -x eine falsche Adresse angege-
  869. ben wird, ist ein Absturz der Shell möglich. Es sollte nur eine Adresse
  870. verwendet werden, die zuvor mit exec -l ermittelt wurde.
  871.  
  872. Siehe auch:    basep
  873.         gemexec
  874.  
  875. -----
  876. exit - Beenden der Shell oder eines Shellscripts
  877.  
  878. Syntax: exit
  879.  
  880. Im Dialogmodus: beendet die Shell. Hat dieselbe Wirkung wie ein Druck auf
  881. Ctrl V in der Kommandoeingabe.
  882. Nach einem exit wird folgendes getan:
  883. 1)  ein evtl. mit trap definiertes Kommando wird ausgeführt.
  884. 2)  wenn gon eingegeben worden ist, aber noch kein goff, wird goff aufgeru-
  885.     fen.
  886. 3)  die Speicherbereiche der Shell-Variablen werden freigegeben.
  887. 4)  die Speicherbereiche der Tastatur-History werden freigegeben.
  888. 5)  der für getscr/putscr reservierte Speicherbereich wird freigegeben.
  889. 6)  ein evtl. residentes Helpfile wird freigegeben.
  890. 7)  die Speicherbereiche der Shellfunktionen werden freigegeben.
  891. 8)  die Speicherbereiche der Laufwerksbezeichnungen werden freigegeben.
  892. 9)  die Speicherbereiche der Tastendefinitionen werden freigegeben.
  893. 10) wenn das Shellflag s gesetzt ist, wird das aktuelle Verzeichnis in die
  894.     Datei $HOME\wdir gespeichert und diese Datei unsichtbar gemacht.
  895. 11) die DTA wird auf den Zustand vor dem Start der Shell zurückgestellt.
  896. 12) der Eintrag im Cookiejar wird entfernt und ggfs. der Speicherbereich des
  897.     Cookiejars freigegeben.
  898. 13) alle evtl. noch offenen Umleitungsdateien werden geschlossen.
  899. 14) der Speicherbereich der Enviromnent-Stringpointer wird freigegeben.
  900. 15) das Programm wird beendet.
  901.  
  902. Wenn dieses Kommando in einem Shellscript steht, wird nur das Shellscript
  903. beendet. Es wird keine der oben angeführten Aktionen durchgeführt.
  904.  
  905. -----
  906. export - Markieren von Shell-Variablen für das Environment
  907.  
  908. Syntax: export [[-] {Variable}]
  909.  
  910. Alle als exportiert markierten Shellvariablen werden beim Start eines
  911. Binärprogrammes als Environment in die Basepage des neuen Programmes ein-
  912. getragen. Dadurch ist es möglich, eine Umgebung zu schaffen, die beim 
  913. Start weiterer Programme erhalten bleibt.
  914. Beim Aufruf ohne Parameter wird eine Liste aller exportierter Variablen
  915. ausgegeben.
  916. Beim Aufruf mit den Namen von mindestens einer Shellvariablen werden alle
  917. angegebenen Variablen als exportiert markiert. Wenn Variablen angegeben
  918. werden, die noch nicht existieren, so werden diese mit einem leeren Wert
  919. angelegt und exportiert.
  920. Die Namen der Variablen können dabei im Format der erweiterten Wildcards
  921. angegeben werden, z.B. "export a*" exportiert alle Variablen, deren Name
  922. mit a beginnt. Näheres siehe okami.doc.
  923.  
  924. Flag:    -    Bei den angegebenen Variablen wird die Exporiert-Markierung
  925.         gelöscht. Damit können Variablen aus dem Environment ent-
  926.         fernt werden.
  927.  
  928. Beispiel:
  929.     PS1="Eingabe:"            Ändern des Shell-Prompts
  930.     export PS1            Übernahme von PS1 ins Environment
  931.     sh                Wieder-Aufruf der Shell (Subshell)
  932.     echo PS1            Es erscheint "Eingabe:", da die
  933.                     Variable PS1 aus dem Environment
  934.                     eingestellt wurde.
  935.     exit                Beenden der aufgerufenen Subshell.
  936.     export - PS1            Entfernen von PS1 aus dem Environm.
  937.  
  938. Siehe auch: readonly
  939. Zum Format des Environments siehe okami.doc.
  940.  
  941. -----
  942. extname - Ermitteln des Dateinamen-Extenders
  943.  
  944. Syntax: extname filename
  945.  
  946. Der Extender des angegebenen Filenamen wird nach StdOut geschrieben (incl.
  947. dem Punkt vor dem Extender). Wenn der Dateiname keinen Extender hat, wird
  948. nur ein Zeilenvorschub ausgegeben.
  949. Dies ist eine reine Stringfunktion, das Ergebnis ist unabhängig von der
  950. Einstellung des Shell-Flags l (siehe set) und davon, ob die angegebene Datei
  951. existiert oder nicht.
  952.  
  953. Beispiele:
  954.     extname d:/shell/sh.ttp     erzeugt die Ausgabe ".ttp".
  955.     extname profile            erzeugt einen Zeilenvorschub.
  956.     EXT=`extname hallo.txt`        einlesen in eine Variable.
  957.  
  958. Siehe auch: basename
  959.         dirname
  960.         drvname
  961.         fullname
  962.  
  963. -----
  964. false - Rückgabe von 0
  965.  
  966. Syntax: false
  967.  
  968. Dieses Kommando gibt immer eine 0 zurück. Es wird normalerweise mit while
  969. oder if verwendet.
  970.  
  971. Beispiel: Ausblenden eines Teiles eines Shellscripts. Durch "true" anstelle
  972. von "false" kann der Teil wieder aktiviert werden.
  973.  
  974.         if false
  975.           ............. (irgendwelche Kommandos)
  976.         fi
  977.  
  978. Siehe: if
  979.        while
  980.        true
  981.  
  982. -----
  983. fcts - Liste der Shellfunktionen
  984.  
  985. Syntax: fcts
  986.  
  987. Es wird eine Liste aller Shellfunktionen ausgegeben. Zu jeder Funktion er-
  988. scheint eine Zeile der Form:
  989.  
  990.     365  hallo()
  991.  
  992. Die Zahl ist die Größe der Funktion in Bytes.
  993. Nach der Liste wird eine Statistik ausgegeben, die folgende Angaben umfaßt:
  994.     Summe der Größen aller Funktionen,
  995.     Anzahl der Funktionen,
  996.     Maximalanzahl der zu definierenden Funktionen,
  997.     prozentuelle Belegung der Funktionstabelle.
  998.  
  999. -----
  1000. fgrep - SIEHE grep
  1001.  
  1002. -----
  1003. fi - SIEHE if
  1004.  
  1005. -----
  1006. find - Suchen von Dateien
  1007.  
  1008. Syntax: find Startdirectory Suchmaske
  1009.  
  1010. Findet alle Dateien ab dem angegebenen Startdirectory, die auf die ange-
  1011. gebene Suchmaske passen. Es wird rekursiv in allen Ordnern gesucht.
  1012.  
  1013. Beispiel:
  1014. 1) Ausgabe aller Shellscripts, die unter dem Home-Directory liegen:
  1015.     find $HOME *.sh
  1016.         
  1017. 2) Listen aller Dateien, die auf einer Festplattenpartition liegen:
  1018.     find c:\ *.*
  1019.         
  1020. 3) Listen aller C-Quelldateien ab dem aktuellen Directory:
  1021.     find . *.c
  1022.  
  1023.  
  1024. Die Verwendung dieses Kommandos ist nützlich mit Kommandos, die von ihrer
  1025. Eingabe Dateinamen einlesen (z.B. backup). In Verbindung mit xargs können
  1026. auch andere Kommandos für die entsprechenden Dateien aufgerufen werden.
  1027.  
  1028. -----
  1029. fsel - eine Datei mit der Fileselect-Box auswählen
  1030.  
  1031. Syntax: fsel [Pfad [Default [Variable]]]
  1032.  
  1033. Es wird die AES-Fileselect-Box aufgerufen, um eine Datei auszuwählen,
  1034. deren Name nach StdOut geschrieben wird. Damit dieser Aufruf funktioniert,
  1035. muß die Shell als GEM-Applikation angemeldet werden. Dies geschieht mit
  1036. dem Kommando gon, das vor fsel aufgerufen werden muß.
  1037.  
  1038. In Pfad kann der Suchpfad und das Suchmuster der darzustellenden Dateien
  1039. angegeben werden. In Default kann der als ausgewählt voreinzustellende
  1040. Dateiname angegeben werden. Wenn Pfad oder Default nicht angegeben sind,
  1041. lautet die Voreinstellung:
  1042.  
  1043.     Pfad    = ".\*.*"    (alle Dateien im aktuellen Directory)
  1044.     Default = ""        (keine Voreinstellung)
  1045.  
  1046. Wenn der Anwender die Abbruch-Taste der Fileselect-Box anwählt, gibt fsel
  1047. eine 0 zurück, ansonsten eine 1. Dieser Rückgabewert kann in der Shell-
  1048. variablen "?" abgefragt werden.
  1049. Wenn als dritter Parameter eine Variable angegeben ist, wird der Rück-
  1050. gabewert (0 bei Abbruch, 1 sonst) auch in dieser Variablen abgelegt.
  1051. Wenn dieser Parameter, nicht aber der zweite benutzt wird (weil keine Vor-
  1052. einstellung gewünscht ist), muß der zweite Parameter . (Punkt) oder ""
  1053. (zwei doppelte Anführungszeichen) lauten.
  1054.  
  1055. Beispiele:
  1056.     gon            muß immer zuerst kommen
  1057.     fsel            Auswahl aus allen Dateien im aktuellen Dir.
  1058.     fsel *.c        Auswahl aus allen C-Dateien
  1059.     fsel e:\shell\*.c    Auswahl aus den C-Dateien in e:\shell
  1060.     a=`fsel *.c`        Einlesen in eine Variable
  1061.     echo $?         Ausgabe von 0, falls Abbruch, 1 sonst
  1062.     fsel *.c sh.c Var
  1063.     echo $Var        Ergebnis in eine Variable speichern
  1064.  
  1065. Da die Fileselect-Box den von ihr benutzten Bildschirmbereich nicht wieder
  1066. restauriert, speichert fsel den gesamten Bildschirm vor dem Aufruf der
  1067. Fileselect-Box ab. Daher müssen beim Aufruf von fsel mindestens 32000
  1068. Bytes an freiem Speicher verfügbar sein.
  1069.  
  1070. Rückgabewert:
  1071.     1    Abbruch angewählt.
  1072.     0    Ok angewählt.
  1073.  
  1074. -----
  1075. fullname - Ermitteln des absoluten Dateinamens
  1076.  
  1077. Syntax: fullname file
  1078.  
  1079. Ermittelt den vollen, absoluten Dateinamen der angegebenen Datei. Der abso-
  1080. lute Dateiname ist von dem Format
  1081.     Laufwerk ":\" Pfad "\" Dateiname
  1082. z.B. "d:\shell\sh.ttp". Es ist ohne Bedeutung, ob eine Datei mit dem ange-
  1083. gebenen Namen existiert.
  1084.  
  1085. Beispiele: Es sei D: das aktuelle Laufwerk, d:\shell das aktuelle Directory
  1086. von Laufwerk D: und c:\compiler\cc das aktuelle Laufwerk von Laufwerk C:.
  1087.  
  1088.     fullname von...         ergibt...
  1089.  
  1090.     c:\files\hallo.txt        c:\files\hallo.txt
  1091.     c:test.c            c:\compiler\cc\test.c
  1092.     sh.ttp                d:\shell\sh.ttp
  1093.     \sh.ttp             d:\sh.ttp
  1094.     bin\ship.exe            d:\shell\bin\ship.exe
  1095.  
  1096. Siehe auch: basename
  1097.         dirname
  1098.         drvname
  1099.         extname
  1100.  
  1101. -----
  1102. gemexec - Shellfunktion zum Starten von GEM-Programmen
  1103.  
  1104. Syntax: Programmname {Parameter}
  1105.  
  1106. Bei gemexec handelt es sich um eine Shellfunktion, die nicht direkt vom Be-
  1107. nutzer, sondern von der Shell selber aufgerufen wird. Der Sinn der Sache ist,
  1108. manche Programme, insbesondere GEM-Programme, unter besonderen Bedingungen
  1109. aufzurufen. Wenn ein GEM-Programm aufgerufen wird, soll z.B. vorher der Bild-
  1110. schirm gelöscht, der Cursor ab- und die Maus eingeschaltet werden, und nach
  1111. dem Ende des Programms soll der Bildschirm wieder gelöscht werden. Um diese
  1112. Prozedur möglichst flexibel und vom Anwender konfigurierbar zu gestalten, wer-
  1113. den GEM-Programme (das sind per Definition alle externen Kommandos, deren
  1114. Extender in der Shellvariablen GEXT gespeichert sind) über die Shellfunktion
  1115. gemexec ausgeführt. Diese Funktion kann alle weiteren Aktionen durchführen und
  1116. ist auch dafür verantwortlich, daß das Programm überhaupt gestartet wird.
  1117.  
  1118. Nach dem Start der Shell wird die Funktion folgendermaßen initialisiert:
  1119.  
  1120.     gemexec()
  1121.     {
  1122.       _=$0 $*
  1123.       cls
  1124.       cursor -v
  1125.       exec -g $_
  1126.       cls
  1127.       _=
  1128.     }
  1129.  
  1130. Beim Aufruf der Funktion gemexec enthält die Shellvariable $0 nicht den Namen
  1131. der Funktion, sondern den vollständigen Pfadnamen des aufzurufenden Programms.
  1132. Die Shellvariable $* enthält die zu übergebenen Parameter. Die Funktion kann 
  1133. kann vom Anwender beliebig verändert werden, aber um das betreffende Programm
  1134. ordnungsgemäß aufzurufen, sollte sie zumindest folgendes tun:
  1135.  
  1136.     1) Speichern von $0 und $* in einer Shellvariablen, hier: _
  1137.     2) Durchführung aller Aktionen vor Programmstart, hier: cls und
  1138.        cursor -v (Bildschirm löschen und Cursor abschalten).
  1139.     3) Aufruf des Programms mit dem Kommando "exec -g $_"
  1140.        Anstelle von $_ kann die in 1) benutzte Variable, aber
  1141.        auch andere Werte stehen.
  1142.        ACHTUNG: Beim Aufruf von exec muß UNBEDINGT das Flag -g angegeben
  1143.        werden!!!!! Ansonsten wird exec die Funktion gemexec nochmal mit
  1144.        denselben Parametern aufrufen => infinite Rekursion.
  1145.     4) Die Freigabe der Variablen (hier: _) ist nicht unbedingt notwendig,
  1146.        da sie immer wieder verwendet wird.
  1147.  
  1148. Die Funktion gemexec kann wie jede Shellfunktion programmiert werden, was be-
  1149. deutet, daß sie auch Kontrollstrukturen wie if und while beinhalten kann. Sie
  1150. kann den in $0 übergebenen Programmnamen mit basename und extname analysieren
  1151. und entsprechende Operationen durchführen. Sie muß nicht unbedingt das Pro-
  1152. gramm, daß in $0 übergeben wird, ausführen; dadurch ist es möglich, etwas
  1153. völlig anderes als ein Programm auf diese Weise aufzurufen.
  1154. Das folgende Beispiel zeigt, wie man das "Applikation anmelden" des Desktop
  1155. auf diese Weise simulieren kann. Es macht alle Dateien mit Extender .gfa und
  1156. .c ausführbar. Beim Ausführen einer .gfa-Datei wird der GFA-Basic-Interpreter,
  1157. beim Ausführen einer .c-Datei der C-Compiler aufgerufen. Alle anderen Programme
  1158. werden wie üblich ausgeführt. Wichtig dabei ist, daß die Extender .gfa und .c
  1159. sowohl in XEXT als auch in GEXT aufgeführt werden.
  1160.  
  1161.     XEXT=$XEXT,.gfa,.c
  1162.     GEXT=$GEXT,.gfa,.c
  1163.     gemexec()
  1164.     {
  1165.       _=$0 $*
  1166.  
  1167.       # Extender ermitteln, Flag setzen
  1168.       f=0
  1169.       e=`extname $_`
  1170.  
  1171.       # GFA-Basic? 
  1172.       if [ $e = .gfa ]
  1173.       then
  1174.         f=1
  1175.         exec -g d:/gfabasic/gfabasic.prg $_
  1176.       fi
  1177.       # C-Source?
  1178.       if [ $e = .c ]
  1179.       then
  1180.         f=1
  1181.         exec -g d:/compiler/cc.ttp $_
  1182.       fi
  1183.       # Weder-noch, also normal ausführen
  1184.       if [ $f = 0 ]
  1185.       then
  1186.         # wie das Default-gemexec
  1187.         cls
  1188.         cursor -v
  1189.         exec -g $_
  1190.         cls
  1191.       fi
  1192.  
  1193.       # Variablen freigeben
  1194.       e=
  1195.       f=
  1196.       _=
  1197.     }
  1198.  
  1199. Die Benutzung des Flags $f entscheidet darüber, ob das Programm am Ende doch
  1200. noch mit exec -g aufgerufen wird.
  1201.  
  1202. Die folgende gemexec-Funktion kann benutzt werden, um nach dem Ende eines GEM-
  1203. Programms den Bildschirm wieder so herzustellen, wie er vor dem Aufruf war.
  1204. Dazu werden die internen Kommandos getscr und putscr sowie die VT52-Sequenzen
  1205. zum Speichern und Wiederherstellen der Cursorposition benutzt. Dabei werden
  1206. allerdings 32000 Bytes zum Speichern des Bildschirminhaltes belegt.
  1207.  
  1208.     gemexec() 
  1209.     {
  1210.       # Programmname und Parameter merken
  1211.       _=$0 $*
  1212.       # Cursorposition speichern
  1213.       echo ^033j^c
  1214.       # Bildschirminhalt speichern
  1215.       getscr
  1216.       # Bildschirm löschen und Cursor unsichtbar
  1217.       cls ; cursor -v
  1218.       # das Programm starten
  1219.       exec -g $_
  1220.       # Bildschirminhalt wiederherstellen und Speicher freigeben
  1221.       putscr ; putscr -f
  1222.       # Cursorposition wiederherstellen und Cursor sichtbar
  1223.       echo ^033k^c ; cursor +v
  1224.       # Variable freigeben
  1225.       _=
  1226.     }
  1227.  
  1228. Siehe auch:    exec
  1229.  
  1230. -----
  1231. getscr - Sichern/Laden eines Bildschirminhalts
  1232.  
  1233. Syntax: getscr [-[Header] Dateiname]
  1234.  
  1235. Der Bildschirminhalt wird in einem internen Speicherbereich gesichert. Er
  1236. kann mit dem Kommando putscr wiederhergestellt werden.
  1237. Wenn das Flag - angegeben ist, wird der Bildschirminhalt aus der angegebenen
  1238. Datei gelesen. Dazu kann die Länge eines Headers angegeben werden, der über-
  1239. lesen wird. Wenn kein Header angegeben wird, wird kein Header überlesen.
  1240.  
  1241. Durch nochmaligen Aufruf von getscr wird der zuvor gespeicherte Bildschirm
  1242. überschrieben.
  1243.  
  1244. Beispiel:
  1245.     getscr
  1246.             Sichern des aktuellen Bildschirminhaltes
  1247.     getscr - <picture.doo
  1248.             Laden eines Doodle-Bildes (32000 Bytes)
  1249.     getscr -34 <picture.pi3
  1250.             Laden eines Degas-PI3-Bildes (32066 Bytes)
  1251.  
  1252. Siehe: putscr
  1253.        showpic (externes Kommando)
  1254.        das Beispiel bei gemexec
  1255.  
  1256. -----
  1257. goff - Abmeldung von AES
  1258.  
  1259. Syntax: goff
  1260.  
  1261. Die Shell meldet sich als Applikation vom AES ab, und der Bildschirm wird
  1262. gelöscht.
  1263. Wenn vor der Eingabe von goff nicht gon eingegeben worden ist, erscheint
  1264. stattdessen eine Fehlermeldung.
  1265.  
  1266. Siehe: gon
  1267.  
  1268. -----
  1269. gon - Anmeldung bei AES
  1270.  
  1271. Syntax: gon [-q]
  1272.  
  1273. Die Shell meldet sich bei GEM als Applikation an.
  1274. Dieses Kommando ist nützlich bei der Verwendung von GEM-Applikationen.
  1275. Außerdem muß es vor der Verwendung einiger interner Kommandos (z.B. fsel
  1276. und mouse) benutzt werden.
  1277. Außerdem hat gon folgende Konsequenzen:
  1278. 1) die Tastatureingabe läuft über die AES-Funktion evnt_keybd statt über
  1279.    die Gemdos-Funktion Crawcin,
  1280. 2) das Kommando sleep benutzt die AES-Funktion evnt_timer statt einer
  1281.    Warteschleife.
  1282. Daraus ergibt sich, daß Accessories, die im Multitasking-Betrieb laufen,
  1283. bei aktiviertem gon während der Tastatureingabe und dem sleep-Kommando
  1284. aktiviert werden. Ein Accessory, das laufend die Uhrzeit auf den Bild-
  1285. schirm schreibt, tut dies also während der Tastatureingabe, wenn gon
  1286. aktiv ist. Dasselbe gilt für andere Hintergrund-Accessories wie Drucker-
  1287. spooler o.ä.
  1288. Die Tastaturpufferung funktioniert jedoch trotzdem, da die Tastaturein-
  1289. gaberoutine erst den Tastenpuffer ausliest, bevor sie weitere Tasten mit
  1290. evnt_keybd einliest.
  1291.  
  1292. Wird gon mehrfach hintereinander aufgerufen, ohne daß zwischendurch goff
  1293. aufgerufen wird, erscheint eine Fehlermeldung.
  1294.  
  1295. Wenn das Flag -q angegeben ist, meldet sich die Shell nicht als Applikation
  1296. an, sondern es wird folgender Rückgabewert (in $?) zurückgeliefert:
  1297.     1    wenn gon bereits aktiviert ist,
  1298.     0    sonst.
  1299. Um Fehlermeldungen zu vermeiden, sollten Shellscripts, die mit Kommandos, die
  1300. gon erfordern (z.B. fsel), folgendermaßen vorgehen:
  1301.  
  1302.     gon -q
  1303.     GONSTAT=$?
  1304.     if [ $GONSTAT = 0 ]
  1305.     then
  1306.       gon
  1307.     fi
  1308.     
  1309.     ...................... andere Kommandos
  1310.     
  1311.     if [ $GONSTAT = 0 ]
  1312.     then
  1313.       goff
  1314.     fi
  1315.     GONSTAT=
  1316.  
  1317. Auf diese Weise wird der Status von gon (aktiv oder nicht) in einer Variablen
  1318. (GONSTAT) gespeichert und benutzt, um gon ggfs. zu aktivieren und später wieder
  1319. zu deaktivieren.
  1320.  
  1321. Siehe:    goff
  1322.     sleep
  1323.  
  1324. -----
  1325. grep , fgrep - Suchen von Mustern
  1326.  
  1327. Syntax: grep|fgrep [-cfsl] Pattern {File}
  1328.  
  1329. Sucht in allen angegebenen Dateien oder, falls keine Dateien angegeben sind,
  1330. in StdIn nach Zeilen, die auf das Muster Pattern passen. Die gefundenen
  1331. Zeilen werden mit dem Dateinamen ausgegeben.
  1332.  
  1333. fgrep sucht feste Strings. Es werden alle Zeilen ausgegeben, die den String
  1334. Pattern enthalten.
  1335.  
  1336. grep sucht Muster nach den Regeln der erweiterten Wildcards (siehe okami.doc).
  1337. Es werden alle Zeilen ausgegeben, in denen sich eine Zeichenkette befindet,
  1338. die nach den Regeln der erweiterten Wildcards auf Pattern paßt.
  1339. Wenn Pattern mit einer Tilde (~) beginnt, wird Pattern ab dem Beginn der Zei-
  1340. len gesucht. Wenn Pattern mit einem Dollarzeichen ($) endet, wird Pattern am
  1341. Ende der Zeilen gesucht. Achtung: in der Eingabe muß das Dollarzeichen in ein-
  1342. fachen Anführungszeichen ('$') oder hinter einem Dach (^$) stehen, da es sonst
  1343. als Einleitung einer Shellvariablen interpretiert wird.
  1344.  
  1345. Flags:
  1346.     -c    Es werden die Zeilennummern der gefundenen Zeilen mit ausge-
  1347.         geben.
  1348.     -f    Es wird in jeder Datei nur die erste Übereinstimmung gesucht.
  1349.     -s    (nur für grep) berücksichtigt Whitespace-Zeichen am Zeilen-
  1350.         anfang. Wenn -s nicht angegeben ist, werden Whitespace-Zeichen
  1351.         am Zeilenanfang ignoriert.
  1352.     -l    ignoriert Groß- und Kleinschreibung.
  1353.  
  1354. Beispiele:            findet z.B. die Zeile
  1355.  
  1356.     grep Hallo        Der Mann sagte "Hallo".
  1357.                 Hallo, sagte der Mann.
  1358.     grep H*o        Der Mann sagte nochmal "Hallo".
  1359.                 Heute oder morgen.
  1360.     grep [hH]allo        hallo
  1361.                 Hallo
  1362.     grep -l hallo        (dito)
  1363.                 Der Mann sagte zum dritten Mal "Hallo".
  1364.     grep Hallo^$        Der Mann sagte zu letztenmal Hallo
  1365.     fgrep ~[a-n]*[aAbB]?^$    Hier steht "~[a-n]*[aAbB]?$".
  1366.  
  1367.     fgrep printf *.c    sucht alle printf-Aufrufe in allen C-Dateien.
  1368.     fgrep "printf *.c"    sucht die Zeichenkette "printf *.c" in StdIn.
  1369.     cmds | grep ~[gst]    Ausgabe aller interner Kommandos, die mit g,
  1370.                 s oder t beginnen.
  1371.  
  1372. Rückgabewert:
  1373.     -1    Aufruffehler
  1374.     sonst    Anzahl der gefundenen Übereinstimmungen.
  1375.  
  1376. -----
  1377. hardcopy - Ausdrucken des Bildschirminhalts
  1378.  
  1379. Syntax: hardcopy
  1380.  
  1381. Falls ein Drucker empfangsbereit ist, wird eine Bildschirm-Hardcopy ausge-
  1382. druckt (nur bei S/W-Monitor moeglich), ansonsten erscheint eine Fehler-
  1383. meldung.
  1384.  
  1385. Rückgabewert:
  1386.     0    Ok., es ist gedruckt worden.
  1387.     -1    Der Drucker war nicht bereit.
  1388.  
  1389. -----
  1390. hd - Ausgabe eines Hex-Dumps
  1391.  
  1392. Syntax: hd [-b] [File]
  1393.  
  1394. Gibt einen Hex-Dump von StdIn oder, falls angegeben, von File, nach StdOut.
  1395. Der Hexdump ist folgendermaßen aufgebaut:
  1396.  
  1397. nnnnnn hh hh ..... hh hh aaaaaaaa aaaaaaaa
  1398.  
  1399. nnnnnn: Die Byte-Nummer (Hex)
  1400. hh:    jeweils ein Byte in Hex (insgesamt 16)
  1401. aa...a: die entsprechenden Bytes in Ascii (ein Punkt, falls nicht druckbar.
  1402.     Es wird der Punkt mit Ascii-Code 0xfa benutzt.).
  1403.  
  1404. Flags:    -b    An der Stelle aa...a werden keine Punkte, sondern immer die
  1405.         Ascii-Zeichen ausgegeben, auch wenn diese nicht druckbar
  1406.         sind. Eine solche Ausgabe kann man dann z.B. zu dem Kommando
  1407.         raw -n pipen.
  1408.  
  1409. Um einen flüchtigen Überblick über den binären Inhalt einer Datei zu ge-
  1410. winnen, reicht es in manchen Fällen aus, das Kommando raw zu benutzen, das
  1411. wesentlich schneller ist und eine kürzere Ausgabe erzeugt.
  1412.  
  1413. Beispiele:
  1414. 1) Hex-Dump einer Binärdatei:
  1415.     hd sh.ttp
  1416.  
  1417. 2) Hex-Dump der Inhalte der Speicherstellen 0xabc000 bis 0xabcfff:
  1418.     memex 0xabc000 0xfff | hd
  1419.  
  1420. 3) Seitenweiser Hexdump:
  1421.     hd sh.ttp | pg
  1422.  
  1423. 4) Hexdump der Dateien test1.tos, test2.tos und test3.tos in die Datei
  1424.    test.hd:
  1425.     hd test1.tos test2.tos test3.tos > test.hd
  1426.  
  1427.  
  1428. Siehe auch:    raw
  1429.  
  1430. -----
  1431. help - Kurzanleitung mit Syntaxerklärung
  1432.  
  1433. Datei:    $HOME/help
  1434. Syntax: help
  1435.  
  1436. Die Datei Datei $HOME/help wird nach StdOut ausgegeben. Die Ausgabe erfolgt
  1437. mit dem Kommando pg.
  1438.  
  1439. Siehe: pg
  1440.  
  1441. -----
  1442. history - Laden und Speichern der History-Tabelle
  1443.  
  1444. Syntax: history [-(l|s)]
  1445.  
  1446. Wenn kein Parameter angegeben ist, werden alle Einträge der Tastatur-History-
  1447. tabelle nach StdOut geschrieben, der zuletzt eingegebene Eintrag zuletzt.
  1448. (Das ist, wenn history von der Tastatur eingegeben wurde, das history-Kommando
  1449. selber).
  1450. Wenn der Parameter -l angegeben ist, werden Zeilen von StdIn eingelesen und
  1451. nacheinander in die History-Liste eingefügt, so als ob sie über die Tastatur
  1452. eingegeben würden.
  1453.  
  1454. Wenn das Flag -s angegeben ist, wird nur eine Statistik über freie und belegte
  1455. Plätze in der History-Liste ausgegeben. Hierbei ist zu beachten, das die His-
  1456. tory-Liste in der Art eines Ringpuffers organisiert ist, was bedeutet, daß sie
  1457. niemals überlaufen kann.
  1458.  
  1459. Mit den folgenden Zeilen im Profile:
  1460.  
  1461.     HISTFILE=$HOME/history
  1462.     if [ -f $HISTFILE ]
  1463.     then
  1464.              history -l <$HISTFILE
  1465.     fi
  1466.     trap +history ^>$HISTFILE ^; chmod +h $HISTFILE
  1467.  
  1468. wird bei jedem Programmende die History-Liste in die Datei $HOME/history ge-
  1469. schrieben (und die Datei unsichtbar gemacht), und bei Programmstart wird die
  1470. History aus dieser Datei wiederhergestellt.
  1471. Anmerkung: 
  1472. 1) es genügt:
  1473.     trap +history ^>$HISTFILE
  1474.    , aber dann ist die Datei nicht unsichtbar.
  1475. 2) das Pluszeichen vor history verhindert das Überschreiben eines evtl. be-
  1476.    reits definierten Trap-Kommandos.
  1477.  
  1478. Siehe auch:    trap
  1479.         okami.doc zum Thema Tastatureingabe
  1480.  
  1481. -----
  1482. if, then, else, fi - Bedingte Ausführung
  1483.  
  1484. Syntax: if Kommando1
  1485.     [then]
  1486.     Kommandos2
  1487.     [else
  1488.      Kommandos3]
  1489.     fi
  1490.  
  1491. Mit dieser Befehlsfolge ist es möglich, Teile eines Shellscripts nur
  1492. dann auszuführen, wenn eine bestimmte Bedingung zutrifft. Die Verwen-
  1493. dung bei Tastatureingabe ist ebenfalls möglich, aber nicht unbedingt
  1494. sinnvoll.
  1495.  
  1496. Wenn der Rückgabewert von Kommando1 ungleich 0 ist, werden die unter
  1497. Kommandos2 angegebenen Kommandos ausgeführt. Wenn der Rückgabewert
  1498. von Kommando1 gleich 0 ist, werden die unter Kommandos3 angegebenen
  1499. Kommandos ausgeführt, falls angegeben. Hierbei sind Kommandos2 und
  1500. Kommandos3 Folgen von beliebig vielen (auch null) beliebigen Shellkommandos
  1501. (auch weitere if-else-fi-Konstruktionen). Es können über 32000 if's ge-
  1502. schachtelt werden.
  1503.  
  1504. Das Kommando "then" ist ohne jegliche Wirkung. Es kann aus Kompatibili-
  1505. täts- oder aus kosmetischen Gründen verwendet werden.
  1506.  
  1507. Als Kommando1 kann ein beliebiges Shell-Kommando stehen. Die meisten
  1508. internen Kommandos geben im Fehlerfall -1, sonst 0 zurück. Bei einigen
  1509. Kommandos (z.B. grep) hat der Rückgabewert eine andere Bedeutung.
  1510. Typische Kandidaten für "Kommando1" sind true, false und test (bzw. "[").
  1511.  
  1512.  
  1513. Beispiele:
  1514.  
  1515. Die folgenden Beispiele sind als Ausschnitte von Shellscripts zu verstehen.
  1516.  
  1517. 1) Ausgabe der Information, ob eine Datei existiert
  1518.  
  1519.     if test -f datei.txt
  1520.     then
  1521.       echo datei.txt existiert
  1522.     else
  1523.       echo datei.txt existiert nicht
  1524.     fi
  1525.  
  1526. 2) Genau dasselbe, etwas kürzer
  1527.  
  1528.     if [ -f datei.txt ]
  1529.       echo datei.txt existiert
  1530.     else
  1531.       echo datei.txt existiert nicht
  1532.     fi
  1533.  
  1534. 3) Feststellen, ob ein Muster in einer Datei vorhanden ist
  1535.    (Die Ausgabe von grep wird nach NULL: umgeleitet, damit sie nicht die
  1536.     Bildschirmausgabe stört.)
  1537.  
  1538.     if grep Muster datei.dat >NULL:
  1539.       echo Das Muster ist vorhanden.
  1540.     else
  1541.       echo Es ist nicht vorhanden.
  1542.     fi
  1543.  
  1544. 4) Sicherheitsabfrage vom Benutzer einholen. Wenn der Benutzer "n" ein-
  1545.    gibt, wird das Programm abgebrochen (d.h. das augenblickliche Shell-
  1546.    script beendet).
  1547.  
  1548.     echo "Soll das Programm fortgesetzt werden? (j/n)"
  1549.     read JAODERNEIN
  1550.     if [ $JAODERNEIN = n ]
  1551.       exit
  1552.     fi
  1553.  
  1554. 5) Numerische Vergleiche:
  1555.  
  1556.     echo Bitte geben Sie ihr Alter ein.
  1557.     read ALTER
  1558.     if [ $ALTER -ge 18 ]
  1559.       echo Sie sind erwachsen.
  1560.     else
  1561.       if [ $ALTER -lt 14 ]
  1562.         echo Du bist ein Kind.
  1563.         if [ $ALTER -lt 6 ]
  1564.           echo Du hast geschummelt, mit $ALTER kann man noch nicht lesen.
  1565.         fi
  1566.       else
  1567.         echo Du bist ein Jugendlicher.
  1568.       fi
  1569.     fi
  1570.  
  1571. 6) Das Kommando keydef soll ausgeführt werden, aber nur, wenn es auch als in-
  1572.    ternes Kommando vorhanden ist.
  1573.  
  1574.     if [ keydef -t i ]
  1575.     then
  1576.       keydef F1 "dir"
  1577.     else
  1578.       echo keydef ist nicht vorhanden!
  1579.     fi
  1580.  
  1581. 7) Eine Art Neuimplementation des type-Kommandos, es wird der Typ des Kommandos
  1582.    $COM ausgegeben.
  1583.  
  1584.     if [ $COM -t f ]
  1585.     then
  1586.       echo $COM is a function
  1587.     fi
  1588.     if [ $COM -t i ]
  1589.     then
  1590.       echo $COM is a shell builtin
  1591.     fi
  1592.     (usw.)
  1593.  
  1594. 8) Feststellen, ob das Kommando upn extern oder intern ist:
  1595.  
  1596.     if [ upn -t sb ]
  1597.     then
  1598.       echo upn ist ein externes Kommando
  1599.     else
  1600.       echo upn ist intern oder Shellfunktion
  1601.     fi
  1602.  
  1603.  
  1604. Siehe auch: test
  1605.         true
  1606.         false
  1607.         while
  1608.  
  1609. -----
  1610. indir - Kommando-Indirektion
  1611.  
  1612. Syntax: indir String
  1613.  
  1614. Der String wird ausgewertet (Shellvariablen expandiert, Command Substitution
  1615. durchgeführt etc.) und auf StdOut ausgegeben. String wird also insgesamt
  1616. zweimal ausgewertet: einmal bei der Eingabe des Kommandos und das Ergebnis
  1617. dieser Auswertung nochmal durch das indir-Kommando. Dies ist nützlich beim
  1618. Arbeiten mit Variablen, die andere Variablennamen beinhalten, für doppelte
  1619. Command Substitution usw.
  1620.  
  1621. Beispiele:
  1622.     VAR=hallo
  1623.     POINTER=VAR
  1624.     echo $POINTER            ergibt VAR
  1625.     echo ^$POINTER            ergibt $POINTER
  1626.     indir ^$POINTER            ergibt VAR
  1627.     echo ^$$POINTER            ergibt $VAR
  1628.     indir ^$$POINTER        ergibt hallo
  1629.  
  1630. ... also ein Zugriff auf den Inhalt der Variablen VAR ohne direkten Zugriff
  1631. auf VAR. indir entspricht also in dieser Verwendung ungefähr dem Pointer-
  1632. Konzept moderner Programmiersprachen.
  1633.  
  1634.     VAR=^`echo hallo^`
  1635.     echo $VAR            ergibt `echo hallo`
  1636.     indir $VAR, wie gehts            ergibt hallo, wie gehts
  1637.  
  1638. ... also indirekter Zugriff auf Shellkommandos, die z.B. in einer Shellvaria-
  1639. blen liegen. In obigem indir-Kommando wird zuerst $VAR zu `echo hallo` expan-
  1640. diert, und indir führt dann die Command Substitution aus.
  1641.  
  1642.     REVON='^033p'        speichern eines VT52-Codes
  1643.     echo $REVON        ergibt ^033p
  1644.     indir $REVON        führt den VT52-Code aus.
  1645.  
  1646. -----
  1647. keyb - Konfiguration der Tastatur
  1648.  
  1649. Syntax: keyb [-]
  1650. oder    keyb [(+|-)a] [(+|-)b] [(+|-)c] [-iInit] [-rRepeat]
  1651.  
  1652. Mit diesem Kommando wird die Tastatur konfiguriert. Folgende Konfigurationen
  1653. sind möglich:
  1654.     Das Auto-Repeat kann ein- und ausgeschaltet werden,
  1655.     Das Tastenklicken kann ein- und ausgeschaltet werden,
  1656.     Die Klingel bei Ausgabe von Ascii BEL (0x7) kann ein- und ausge-
  1657.     schaltet werden,
  1658.     Die Zeitspanne bis zum Einsetzen des Auto-Repeat und die Wieder-
  1659.     holrate können eingestellt werden.
  1660. In der ersten Form, also beim Aufruf ohne Parameter oder nur mit einem
  1661. Minuszeichen, wird die Konfiguration ausgegeben. Wenn als Parameter ein
  1662. Minuszeichen angegeben ist, erfolgt die Ausgabe so, daß sie später wieder
  1663. als Parameter für keyb benutzt werden kann, z.B.:
  1664.     x=`keyb -`
  1665.     ....................... sonstige Kommandos
  1666.     keyb $x
  1667. speichert die Konfiguration und stellt sie danach wieder her.
  1668.  
  1669. Bei den Flags a, b und c bedeutet + einschalten und - ausschalten.
  1670.  
  1671.     a    Auto-Repeat ein/aus
  1672.     b    Ascii-BEL ein/aus
  1673.     c    Tastenklick ein/aus
  1674.  
  1675. Bei den Flags -i und -r wird die entsprechende Zeitspanne in 1/50 Sekunden
  1676. angegeben.
  1677.  
  1678.     -i    die Zeitspanne bis zum Einsetzen des Auto-Repeat,
  1679.     -r    die Zeitspanne zwischen zwei Wiederholungen.
  1680.  
  1681. ACHTUNG: bei diesem Kommando können die Flags nicht zu Gruppen zusammenge-
  1682. faßt werden, d.h.
  1683.     keyb -abc
  1684. ist falsch, es muß
  1685.     keyb -a -b -c
  1686. heißen.
  1687.  
  1688. Siehe auch:    cursor
  1689.         scr
  1690.         mouse
  1691.  
  1692. -----
  1693. keydef - Umdefinition der Tastatur
  1694.  
  1695. Syntax: keydef [+(n|s|c|a)] Scancode [Text|-]
  1696.     keydef clear|list|help
  1697.  
  1698. Mit diesem Kommando kann die Ausgabe aller Tasten umdefiniert werden. Es ist
  1699. damit möglich, jeder Taste neue Zeichenketten zuzuordnen, die beim Drücken
  1700. dieser Taste zu erzeugen sind. Damit kann man z.B. die Buchstabentasten um-
  1701. sortieren, aber auch die F-Tasten mit Funktionen belegen.
  1702.  
  1703. Jedes keydef-Kommando betrifft eine Taste, die durch den Scancode und die
  1704. Steuertaste bestimmt ist (z.B. Ctrl A etc.)
  1705.  
  1706. Wenn eins der Flags +n, +s, +c oder +a angegeben ist, bestimmt dieses, für
  1707. welche Steuertaste die Umdefinition wirkt. Es bedeuten:
  1708.     +n    keine Steuertaste
  1709.     +s    eine der Shift-Tasten
  1710.     +c    die Control-Taste
  1711.     +a    die Alternate-Taste
  1712. Wenn keins dieser Flags angegeben ist, wird +n angenommen.
  1713.  
  1714. Der Scancode kann in einem der folgenden Formate angegeben sein:
  1715.     1) ein Minuszeichen, gefolgt von einer Zahl; diese repräsentiert den
  1716.        gewünschten Scancode direkt.
  1717.     2) ein Schlüsselstring. Eine Liste der möglichen Schlüsselstrings
  1718.        finden Sie in dieser Datei unter dem Stichwort "keydefcode".
  1719.  
  1720. Wenn kein Text angegeben ist, wird die betreffende Tastendefinition (falls
  1721. vorhanden) ausgegeben.
  1722. Wenn der Text aus einem Minuszeichen besteht, wird die betreffende Tasten-
  1723. definition (falls vorhanden) gelöscht.
  1724. Ansonsten wird der Text als neue Tastendefinition gespeichert, eine evtl. be-
  1725. reits vorhandene Definition derselben Taste wird dabei überschrieben.
  1726.  
  1727. Wenn der Text Leerzeichen oder Sonderzeichen enthält, muß er in Anführungs-
  1728. zeichen eingeschlossen sein.
  1729.  
  1730. Wenn der Text mit einem Pluszeichen beginnt, wird, wenn in der Tastatur-
  1731. eingabe die betreffende Taste gedrückt wird, die Eingabezeile durch den Text
  1732. ersetzt (ansonsten wird der Text an die bisherige Eingabe angehängt).
  1733. Wenn der Text mit "^c" endet, wird nach Druck auf die betreffende Taste die
  1734. Eingabezeile ausgeführt.
  1735.  
  1736. Wenn der Text mit einem Ausrufezeichen beginnt, stellt er nicht einen durch
  1737. die Taste zu erzeugenden Ascii-String, sondern eine Umdefinition des durch
  1738. die Taste zu erzeugenden Shift-, Scan- und Ascii-Codes dar. Das Format
  1739. lautet
  1740.     ![+x]Scancode [Asciicode]
  1741. x ist dabei entweder n, s, c oder a und bewirkt die Steuertastenkombination.
  1742. Scancode wird wie oben beschrieben angegeben und ist der neue zu erzeugende
  1743. Scancode.
  1744. Asciicode ist ein einziges Zeichen, das den neuen Ascii-Code der Taste be-
  1745. schreibt.
  1746.  
  1747. Wenn als einziger Parameter "clear" angegeben ist, werden sämtliche Tasten-
  1748. definitionen gelöscht.
  1749. Wenn als einziger Parameter "list" angegeben ist, wird eine Liste aller vor-
  1750. handener Definitionen erzeugt, und zwar in Form von keydef-Kommandos.
  1751. Wenn als einziger Parameter "help" angegeben ist, wird eine Liste aller Scan-
  1752. code-Schlüsselstrings erzeugt.
  1753.  
  1754. Alle Umdefinitionen betreffen ausschließlich die Tastatureingabe der Shell.
  1755.  
  1756. Beispiele:
  1757.  
  1758. 1) Amerikanische Tastatur durch Vertauschen von y und z.
  1759.     keydef y z
  1760.     keydef z y
  1761.     keydef -s y Z
  1762.     keydef -s z Y
  1763.  
  1764.    Das jeweils erste y bzw. z ist die Angabe des umzudefinierenden Scancodes.
  1765.    Das zweite ist die Ascii-Zeichenkette, die durch die Taste erzeugt werden
  1766.    soll.
  1767.  
  1768. 2) Ausführen von "dir *.c" bei Druck auf F1:
  1769.     keydef f1 "+dir *.c^c"
  1770.  
  1771. 3) Ausgabe der Definition von Ctrl Help:
  1772.     keydef +c help
  1773.    oder:
  1774.        keydef +c -0x62
  1775.    Einmal wird die Help-Taste durch den Code-String "help" und einmal direkt
  1776.    durch den Scancode 0x62 angegeben.
  1777.  
  1778. 4) Löschen der Definition von Shift F5:
  1779.     keydef -s F5 -
  1780.  
  1781. 5) Ausgabe aller Tastendefinitionen in eine Datei:
  1782.     keydef list >keys.sh
  1783.    Die Datei keys.sh ist dann ein Shellscript, das, wenn es gestartet wird,
  1784.    alle Tastendefinitionen installiert.
  1785.  
  1786. 6) Ein Druck auf Shift-F6 soll dasselbe bewirken wie Help. Dafür wird der
  1787.    von F6 bewirkte Scancode auf den von Help umgebogen.
  1788.     keydef +s F6 "!help"
  1789.  
  1790. 7) Mit Ctrl-Esc wird die Shell beendet, Esc alleine löscht nur die Eingabe-
  1791.    zeile (übernimmt also die Funktion von Clr-Home), Clr-Home löscht den
  1792.    Bildschirm:
  1793.     keydef +c ESC "!+c V"
  1794.     keydef ESC "!CLR"
  1795.     keydef CLR "+cls ^c"
  1796.    Das erste keydef belegt Ctrl-Esc mit Ctrl-V, das zweite belegt Esc alleine
  1797.    mit der ursprünglichen Funktion der Clr-Home-Taste. Das dritte keydef
  1798.    sorgt dafür, daß bei Druck auf Clr-Home das Kommando cls ausgeführt
  1799.    wird.
  1800.    => Man kann alle vordefinierten Tastenfunktionen beliebig auf neue Tasten
  1801.    legen!!!!
  1802.  
  1803. 8) Ein Druck auf Undo soll ein Z eingeben.
  1804.     keydef undo "!Z z"
  1805.     keydef +s undo "!+s Z Z"
  1806.    Das erste keydef sorgt dafür, daß bei Druck auf Undo der Scancode von Z
  1807.    und der Ascii-Code von z benutzt wird. Das zweite keydef macht dasselbe
  1808.    für Shift Undo und erzeugt ein großes Z.
  1809.  
  1810. 9) Löschen aller Tastendefinitionen:
  1811.     keydef clear
  1812.  
  1813. Siehe auch:    keydefcode
  1814.  
  1815. -----
  1816. keydefcode - Code-Strings für Scancode-Angaben des keydef-Kommandos
  1817.   
  1818. Bei allen Codes ist die Groß/Kleinschreibung ohne Bedeutung. Es gilt:
  1819.     * Die Strings A bis Z und 0 bis 9 stehen für die jeweilige Buchstaben-
  1820.       bzw. Zahlentaste.
  1821.     * Die F-Tasten werden durch ein vorgestelltes F gekennzeichnet (z.B.
  1822.       F6, F10,...)
  1823.     * Tasten des Zehnerblocks sind durch ein vorgestelltes Z gekenn-
  1824.       zeichnet. Z5 ist also die 5 auf dem Zehnerblock.
  1825.  
  1826.     Code        Tastenaufschrift
  1827.     ----        ----------------
  1828.                         Alpha-Block
  1829.     ESC        Esc
  1830.     QUES        ß ?
  1831.     ACC        ' `
  1832.     HASH        # ^
  1833.     BS        Backspace
  1834.     TAB        Tab
  1835.     AT        @ Ü \
  1836.     PLUS        + *
  1837.     CR        Return (*)
  1838.     DEL        Delete
  1839.     OB        [ { Ö
  1840.     CB        ] } Ä
  1841.     TIL        ~ |
  1842.     LESS        < >
  1843.     COMMA        , ;
  1844.     DOT        . :
  1845.     MINUS        - _
  1846.     SPC        die Leertaste
  1847.                         Cursor-Block
  1848.     UNDO        Undo
  1849.     HELP        Help
  1850.     INS        Insert
  1851.     CLR        Clr Home
  1852.     UPAR        Pfeil auf
  1853.     DNAR        Pfeil ab
  1854.     LTAR        Pfeil nach links
  1855.     RTAR        Pfeil nach rechts
  1856.                         Zehnerblock
  1857.     ZMINUS        -
  1858.     ZPLUS        +
  1859.     ZOP        (
  1860.     ZCP        )
  1861.     ZSLASH        /
  1862.     ZAST        *
  1863.     ZDOT        .
  1864.     ZCR        Enter (*)
  1865.  
  1866.  
  1867. (*) Eine Umdefinition dieser Tasten ist zwar möglich, aber bei der Tastatur-
  1868. eingabe ohne Wirkung.
  1869.  
  1870. -----
  1871. ls - Ausgabe von Dateilisten
  1872.  
  1873. Syntax: ls [-adlkCv] [-xtbnr] {Filespec}
  1874.  
  1875. Gibt eine Liste aller Dateien, deren Namen auf Filespec passen, nach StdOut
  1876. aus. Filespec nicht angegeben bedeutet .\* (alle Dateien im aktuellen Direc-
  1877. tory).
  1878. Die Namen von Ordnern werden in [] (eckige Klammern) eingefasst.
  1879. Die Namen von ausfuerbaren Dateien werden in <> (spitze Klammern) eingefasst.
  1880. Flags:
  1881.     -a    Auch versteckte und System-Dateien werden ausgegeben.
  1882.     -d    Wenn Filespec der Name eines Ordners ist, wird der Ordner
  1883.         selber und nicht sein Inhalt ausgegeben.
  1884.     -l    Angaben ueber Dateiattribute, Dateilaenge und Datei-
  1885.         datum und -zeit werden ausgegeben. Außerdem werden am Ende
  1886.         der Liste die Summe aller Dateilängen und die Anzahl der
  1887.         Dateien ausgegeben (bei mehr als einer Datei).
  1888.     -k    Keine [] und <> um Dateinamen.
  1889.     -C    Die Dateien werden in mehreren Spalten ausgegeben.
  1890.     -v    Es wird nur der Diskettenname ausgegeben.
  1891.     -x    Die Dateien werden nach Extendern sortiert ausgegeben.
  1892.     -t    Die Dateien werden nach dem Anlagezeitpunkt der Datei
  1893.         sortiert ausgegeben (die älteste Datei zuerst).
  1894.     -b    Die Dateien werden nach ihrer Länge sortiert ausge-
  1895.         geben (die kürzeste Datei zuerst).
  1896.     -n    Die Dateien werden in der Reihenfolge ausgegeben, in der
  1897.         sie physikalisch gespeichert sind. -r ist ohne Wirkung.
  1898.     -r    Die Reihenfolge der Dateien wird umgekehrt (außer bei -n).
  1899.  
  1900. Wenn keins der Flags -x, -t, -b, -n angegeben ist, werden die Dateien nach
  1901. dem Dateinamen sortiert ausgegeben (in aufsteigender Reihenfolge). Dann
  1902. und bei -x erscheinen die Ordner nach den Dateien.
  1903.  
  1904. Wenn als erstes Flag -! angegeben ist, werden alle folgenden Angaben als
  1905. Dateispezifikationen betrachtet und von den betreffenden Dateien Attribute
  1906. (binär), Datum und Uhrzeit (hexadezimal), Dateigröße (dezimal) und der voll-
  1907. ständige Dateiname ausgegeben, und zwar in der physikalischen Reihenfolge.
  1908. Es können keine anderen Flags mit -! benutzt werden. Diese Option dient zu
  1909. Debug-Zwecken der Shell.
  1910.  
  1911. Beispiele:
  1912. 1) Liste aller Dateien im aktuellen Verzeichnis, Ausgabe in mehreren
  1913.    Spalten:
  1914.     ls -C
  1915.  
  1916. 2) Liste aller C-Quelldateien im aktuellen Verzeichnis, sortiert nach
  1917.    Anlagedatum, die jüngste Datei zuerst:
  1918.     ls -tr *.c
  1919.  
  1920. 3) Liste aller .PRG-Dateien im Ordner d:\shell mit Dateiattributen, Datei-
  1921.    länge und -Datum:
  1922.     ls -l d:\shell\*.prg
  1923.  
  1924. 4) Liste aller Dateien im Ordner d:\shell mit Attributen, Länge und Datum,
  1925.    sortiert nach Dateilänge:
  1926.     ls -l -b d:\shell
  1927.  
  1928. 5) Liste von Attributen, Länge und Datum des Ordners d:\shell:
  1929.     ls -ld d:\shell
  1930.  
  1931. 6) Ausgabe des Diskettennamens von Diskette A:
  1932.     ls -v A:\
  1933.  
  1934. Wenn bei Verwendung von ls -C nicht alle Dateien erscheinen, sondern nur
  1935. eine Zeile, ist das Word Wrap des VT52-Terminals deaktiviert. Nach Eingabe
  1936. von cls verhält sich die Ausgabe wieder normal.
  1937.  
  1938. Rückgabewert:
  1939.     -1    Aufruffehler
  1940.     sonst    die Anzahl der ausgegebenen Dateien.
  1941.  
  1942. -----
  1943. mem - Ermitteln des freien Speicherplatzes
  1944.  
  1945. Syntax: mem [-b]
  1946.  
  1947. Wenn kein Flag angegeben ist, wird die Anzahl der freien RAM-Bytes (genauer
  1948. gesagt die Länge des längsten zusammenhängenden freien RAM-Bereiches) nach
  1949. StdOut geschrieben.
  1950. Wenn das Flag -b angegeben ist, wird die Größe der Speicherbänke 0 und 1 sowie
  1951. die Gesamtgröße des RAM-Speichers ausgegeben.
  1952.  
  1953. -----
  1954. memex - Auslesen des Speichers
  1955.  
  1956. Syntax: memex [-acwls] Startadr [Anzahl]
  1957.  
  1958. Kopiert eine Anzahl von Speicherstellen nach StdOut. Falls Anzahl nicht
  1959. angegeben ist, wird Anzahl=1 gesetzt.
  1960.  
  1961. Flags:    -s    Vor dem Auslesen wird der Prozessor in den Supervisor-Modus
  1962.         versetzt. Dies ist sinnvoll beim Auslesen von System-
  1963.         adressen.
  1964.     -a    Liest Anzahl Bytes von Startadr an und gibt die Inhalte
  1965.         als Ascii-Zeichen aus. Bei nicht-druckbaren Zeichen werden
  1966.         die entsprechenden Ascii-Codes (z.B. NUL, SOH etc.) ausge-
  1967.         geben.
  1968.     -c    Liest Anzahl Bytes von Startadr an und gibt die Inhalte
  1969.         numerisch (im Bereich 0...0xff) aus.
  1970.     -w    Liest Anzahl Worte (je 16 bits) von Startadr an und gibt
  1971.         die Inhalte numerisch (im Bereich 0...0xffff) aus.
  1972.     -l    Liest Anzahl Langworte (je 32 bits) von Startadr an und
  1973.         gibt die Inhalte numerisch (im Bereich 0...0xffffffff)
  1974.         aus.
  1975.     Wenn keins von -a, -c, -w, -l angegeben ist, werden Anzahl Bytes
  1976.     von StartAdr an nach StdOut kopiert.
  1977.     Wenn bei -w oder -l eine ungerade Adresse angegeben ist, wird diese
  1978.     vor Benutzung dekrementiert.
  1979.  
  1980. Beispiele:
  1981. 1. Ermitteln der Anzahl der angeschlossenen Diskettenlaufwerke durch Aus-
  1982.    lesen der betreffenden System-Speicherstelle:
  1983.    memex -s -w 0x4a6
  1984. 2. Ausgeben von 100 Bytes von Speicherstelle 0x12345 an als Hexdump:
  1985.    memex 0x12345 100 | hd
  1986.  
  1987. -----
  1988. mkdir - Ordner erzeugen
  1989.  
  1990. Syntax: mkdir [-r] Ordner {Ordner}
  1991.  
  1992. Erzeugt die angegebenen Ordner. Wenn das Flag -r angegeben ist, werden voll-
  1993. ständige Pfade erzeugt, ansonsten nur die zuletzt angegebenen Ordner.
  1994. Achtung: wenn -r angegeben ist, wird der Basisname als der Name einer Datei
  1995. betrachtet und nicht angelegt. Um auch den Basisnamen als Ordner anzulegen,
  1996. muß er mit einem Backslash (oder Slash) abgeschlossen sein.
  1997.  
  1998. Beispiel:
  1999.     mkdir c:/work/test
  2000.             erzeugt den Ordner test als Unterordner von c:/work;
  2001.             wenn c:/work noch nicht existiert, kommt ein Fehler.
  2002.     mkdir -r c:/work/test/data
  2003.             erzeugt die Ordner c:/work und c:/work/test, falls
  2004.             noch nicht vorhanden. Eine Datei oder Ordner namens
  2005.             data wird nicht angelegt.
  2006.     mkdir -r c:/work/test/data/
  2007.             erzeugt die Ordner c:/work, c:/work/test und
  2008.             c:/work/test/data, falls noch nicht vorhanden.
  2009.     FILE=d:/data/files/x.out
  2010.     mkdir -r $FILE
  2011.             legt alle Ordner an, die für die Datei $FILE be-
  2012.             nötigt werden, also den Pfad d:/data/files. Die Datei
  2013.             x.out wird nicht angelegt. Nach diesem Kommando
  2014.             können z.B. Ausgaben nach $FILE umgeleitet werden.
  2015.  
  2016. Rückgabewert: Anzahl der erzeugten Ordner (oder Pfade bei -r).
  2017.  
  2018. -----
  2019. more - SIEHE pg
  2020.  
  2021. -----
  2022. mouse - Konfiguration und Abfrage der Maus
  2023.  
  2024. Syntax: mouse [+|-] [Form] [XVar [YVar]]
  2025.  
  2026. Dieses Kommando dient zwei verschiedenen Zwecken: 1) der Konfiguration
  2027. des Mauszeigers und 2) der Abfrage der Mauskoordinaten. Das Kommando muß
  2028. mit mindestens einem Parameter aufgerufen werden, es können aber alle
  2029. der möglichen Parameter gleichzeitig benutzt werden.
  2030. Es handelt sich hierbei um die Benutzung von AES-Funktionen, weswegen vor
  2031. Benutzung von mouse die Shell als Applikation bei GEM angemeldet werden
  2032. muß. Dies geschieht mit dem Kommando gon.
  2033.  
  2034. Parameter:
  2035.     +    der Mauszeiger wird sichtbar gemacht.
  2036.     -    der Mauszeiger wird unsichtbar gemacht.
  2037.     Form    es wird die Form des Mauszeigers eingestellt. Anstelle von
  2038.         Form steht eine Zahl zwischen 0 und 7, es bedeuten:
  2039.         0    Pfeil
  2040.         1    Cursor (Klammer)
  2041.         2    Biene
  2042.         3    Hand mit Zeigefinger
  2043.         4    flache Hand
  2044.         5    dünnes Fadenkreuz
  2045.         6    dickes Fadenkreuz
  2046.         7    umrahmtes Fadenkreuz
  2047.     XVar    der Name der Variablen, in die die x-Koordinate der Maus
  2048.         gespeichert werden soll. Anstelle von XVar steht ein belie-
  2049.         biger Variablenname außer den Ziffern 0 bis 7 (die als
  2050.         Variablennamen vom Benutzer ohnehin nicht verändert werden
  2051.         sollten.)
  2052.     YVar    analog für die y-Koordinate.
  2053.  
  2054. Beispiel:
  2055.     mouse + 0
  2056.         Der Mauszeiger wird sichtbar und auf einen Pfeil eingestellt.
  2057.     mouse X Y
  2058.     echo Die Mauskoordinaten sind $X und $Y
  2059.         Abfrage der Mauskoordinaten.
  2060.  
  2061. ACHTUNG: Die Einstellung der Maus erfolgt mit der AES-Funktion graf_mouse.
  2062. AES verwaltet das Ein- und Ausschalten der Maus in einem Puffer, d.h. wenn
  2063. die Maus dreimal ausgeschaltet wird, muß sie auch dreimal wieder eingeschal-
  2064. tet werden, bevor sie sichtbar wird. Da mehrfaches Einschalten der Maus zu
  2065. Verwirrungen bei GEM-Formularen führen kann, sollte man hier mit großer
  2066. Vorsicht vorgehen. Wenn es zu Problemen kommt, hilft jedoch meistens die
  2067. Rückkehr zum Desktop.
  2068. Die Mauskoordinaten werden mit der AES-Funktion graf_mkstate bestimmt.
  2069. Erfahrungsgemäß führt dies regelmäßig zu falschen Werten, da das Bildschirm-
  2070. scrolling die Mauskoordinaten beeinflußt. Zuverlässig sind die Werte zu-
  2071. mindest nach einem cls.
  2072.  
  2073. Siehe auch:    cursor
  2074.         keyb
  2075.         scr
  2076.  
  2077. -----
  2078. mv - Dateinamen ändern
  2079.  
  2080. Syntax: mv Source Dest
  2081.  
  2082. Die Datei Source wird in Dest umbenannt. Falls eine Datei mit dem Namen
  2083. Dest bereits vorhanden ist, wird diese geloescht. Wenn Dest der Name eines
  2084. existierenden Ordners ist, wird Source nach Dest\Source umbenannt.
  2085. Das Kommando kann benutzt werden, um Dateien zwischen verschiedenen Lauf-
  2086. werken oder Ordnern zu bewegen. Beim Verschieben auf einem Laufwerk wird
  2087. dabei nur der Directory-Eintrag kopiert, was sehr schnell geht, da die
  2088. Größe der Datei keine Rolle spielt (die Daten bleiben also, wo sie sind).
  2089. Beim Verschieben von einem Laufwerk auf ein anderes wird die Datei erst
  2090. mit cp kopiert und dann gelöscht.
  2091.  
  2092. Ab TOS 1.4 können mit mv auch die Namen von Ordnern geändert werden.
  2093.  
  2094. Bsp: mv msh.tos msh.prg         (Umbenennen)
  2095.      mv test.prg d:\shell\bin        (Verschieben in einen anderen Ordner)
  2096.      mv a:\test.acc c:\         (Verschieben in ein anderes Laufw.)
  2097.      mv docs anleitg            (Änderung eines Ordnernamens: nur ab
  2098.                           TOS 1.4!)
  2099.  
  2100. -----
  2101. num - Ausgabe einer Zahl in verschiedenen Zahlensystemen
  2102.  
  2103. Syntax: num [-bodhxa] Zahl {Zahl}
  2104.  
  2105. Die Zahlen werden in binärer, oktaler, dezimaler und hexadezimaler Form 
  2106. sowie als Ascii-Zeichen ausgegeben. Wenn das entsprechende Ascii-Zeichen
  2107. nicht druckbar ist, wird die Bezeichnung des Zeichens (z.B. NUL, SOH etc.)
  2108. ausgegeben.
  2109.  
  2110. Flags:    -b    Die Zahlen werden nur im Binärsystem ausgegeben.
  2111.     -o    Die Zahlen werden nur im Oktalsystem ausgegeben.
  2112.     -d    Die Zahlen werden nur im Dezimalsystem ausgegeben.
  2113.     -h    Die Zahlen werden nur im Hexadezimalsystem ausgegeben.
  2114.     -x    Wie -h.
  2115.     -a    Die Zahlen werden nur als Ascii-Zeichen ausgegeben.
  2116.  
  2117. Beispiele: 
  2118.  
  2119. 1) Ausgabe von 123 (dezimal) in allen Zahlensystemen:
  2120.         num 123
  2121.  
  2122. 2) Ausgabe von 123 (hex) in allen Zahlensystemen:
  2123.         num 0x123
  2124.  
  2125. 3) Ausgabe von -123 (dezimal) in Hex:
  2126.         num -x "-123"
  2127.    und NICHT: num -x -123
  2128.  
  2129. 4) Ausgabe der Konsolkonfigurationsbits durch Auslesen einer Systemadresse
  2130.    und Umformung ins Binärsystem:
  2131.         memex -sc 0x484 | xargs num -b
  2132.  
  2133.    
  2134. -----
  2135. pg, more - Seitenweise Ausgabe von Dateien
  2136.  
  2137. Syntax: pg|more [File]
  2138.  
  2139. StdOut oder, falls angegeben, File wird in Seiten zu je $PAGELEN Zeilen
  2140. ausgegeben. Nach jeder Seite kann der Anwender:
  2141.     mit der Leertaste die nächste Seite anzeigen,
  2142.     mit der Taste D die nächste halbe Seite anzeigen,
  2143.     mit der RETURN-Taste die nächste Zeile anzeigen,
  2144.     mit der Taste Q die Ausgabe abbrechen.
  2145.  
  2146. -----
  2147. pmd - Ausgabe eines Post-Mortem-Dumps
  2148.  
  2149. Syntax: pmd
  2150.  
  2151. Dieses Kommando kann verwendet werden, um Informationen über ein Programm zu
  2152. erhalten, das von einer Exception durch Bomben beendet wurde. Es erzeugt eine
  2153. Ausgabe, die die Inhalte der Register d0 bis d7 und a0 bis a6 sowie des
  2154. usp (a7), ssp (a7") und des Programmzählers (pc) enthält. Außerdem wird die
  2155. Nummer der die Bomben auslösenden Exception ausgegeben und die obersten sechs
  2156. 16bit-Worte des Stacks, letztere sowohl in Hex- als auch in Ascii-Notation.
  2157. Nicht-druckbare Zeichen (solche mit Ascii-Code<32) werden als dicke Punkte
  2158. ausgegeben.
  2159. Die Nummer der Exception wird dezimal, alle anderen Angaben hexadezimal an-
  2160. gegeben. (Da die Nummer der Exception normalerweise kleiner als 10 ist,
  2161. macht es keinen Unterschied, ob man sie dezimal oder hexadezimal ausgibt.)
  2162.  
  2163. Wenn noch keine Exception aufgetreten ist, durch die Bomben hervorgerufen
  2164. wurden, sind die Informationen ungültig. Es erscheint dann vor der Ausgabe
  2165. die Meldung "WARNING: Information void".
  2166.  
  2167. -----
  2168. ps - Ausgabe der laufenden Programme
  2169.  
  2170. Syntax: ps [-bfc]
  2171.  
  2172. WENN MINT INSTALLIERT IST:
  2173. Es wird eine Liste der augenblicklich aktiven Prozesse erzeugt. Dabei handelt
  2174. es sich um eine Ausgabe des Inhalts von Pseudo-Laufwerk X:.
  2175. Die Ausgabe hat folgendes Format:
  2176.  
  2177. 000  WEV    00:00:00   4096        mint
  2178.  
  2179.     000        Die Prozeßnummer.
  2180.     WEV        Der Prozeßstatus. Siehe unten.
  2181.     00:00:00    Die Laufzeit des Prozesses.
  2182.     4096        Der Speicherbedarf des Prozesses in Bytes.
  2183.     mint        Der Name des Prozesses.
  2184.  
  2185. In diesem Fall wäre der Dateiname des Prozesses also X:\mint.000 .
  2186. Folgende Statusangaben sind möglich:
  2187.     RUN    Der Prozeß ist augenblicklich aktiv.
  2188.     RDY    Der Prozeß ist inaktiv, aber bereit, aktiv zu werden.
  2189.     TRS    Der Prozeß wurde beendet, ist aber noch resident.
  2190.     WEV    Der Prozeß wartet auf ein Ereignis (z.B. auf das Ende eines
  2191.         Kindprozesses).
  2192.     WIO    Der Prozeß wartet auf eine Ein/Ausgabe.
  2193.     ZOM    Es ist ein Zombie-Prozeß.
  2194.     STP    Der Prozeß wurde durch ein Signal beendet.
  2195.  
  2196. Die ps übergebenen Parameter und Flags werden ignoriert.
  2197.     
  2198.  
  2199. WENN MINT NICHT INSTALLIERT IST:
  2200. Das Kommando ps erzeugt eine Liste der augenblicklich laufenden Programme
  2201. (Prozesse). Anders als unter Unix, wo mehrere Prozesse gleichzeitig aktiv
  2202. sein können, ist unter TOS nur jeweils ein Prozeß aktiv. Dieser kann ein
  2203. anderes Programm starten und auf dessen Beendigung warten (mit der Be-
  2204. triebssystem-Funktion Pexec). Das so gestartete Programm kann wiederum
  2205. ein anderes starten usw. Mit ps wird die so erzeugte Reihe von Programmen
  2206. ausgegeben.
  2207. Nach Eingabe von ps erscheint eine Liste der Prozesse in der Reihenfolge
  2208. des Aufrufs. Der augenblickliche Prozeß steht oben, der zuerst vom Desk-
  2209. top gestartete Prozeß steht unten. Das Desktop selber erscheint nicht in
  2210. der Liste.
  2211.  
  2212. Flags:
  2213.     -b    Zu jedem Prozeß wird die Adresse von dessen Basepage aus-
  2214.         gegeben.
  2215.     -f    Wenn dieses Flag angegeben ist, erscheinen die vollen
  2216.         Pfadnamen, unter denen die Programme aufgerufen wurden.
  2217.         Wenn -f nicht angegeben ist, erscheint nur der reine
  2218.         Dateiname (Basisname).
  2219.     -c    Zu jedem Prozeß wird dessen Kommandozeile ausgegeben.
  2220.         VORSICHT: arbeitet unzuverlässig, da bei Programmstart die
  2221.         DTA auf diesen Bereich zeigt. Programme, die die DTA nicht
  2222.         selber ändern, überschreiben bei jedem DTA-Zugriff diesen
  2223.         Bereich.
  2224.  
  2225. Der Kern des ps-Kommandos, nämlich der Schritt von der Adresse der Basepage
  2226. zum Aufrufpfad des zugehörigen Programms, stammt aus der Datei initargs.c
  2227. aus der Library des Sozobon C-Systems.
  2228.  
  2229. ACHTUNG: Die einzige Angabe, auf die man sich verlassen kann, ist die
  2230. Adresse der Basepage. Da TOS den Aufrufpfad eines Programms nicht in
  2231. der Basepage abspeichert, benutzt ps einen Trick: es holt mit Hilfe der
  2232. Basepage-Adresse die gespeicherte Adresse des USP (User-Stack-Pointer) des
  2233. jeweiligen Programms und bekommt über diese den ersten Parameter der zu-
  2234. letzt aufgerufenen Funktion. Dies ist in jedem Fall Pexec, daher ist der
  2235. erste Parameter der Pfadname des aufgerufenen Programms. (Dieser Trick stammt
  2236. aus den Libraries von Sozobon C.) Das kann natürlich schiefgehen, man sollte
  2237. sich also über nichts wundern.
  2238. Teilweise werden die Aufrufpfade durch das Starten von externen Kommandos
  2239. verändert. Beim Programmstart wird die Kommandozeile als DTA benutzt, wenn
  2240. ein Programm also seine DTA nicht ändert, wird die Kommandozeile beim ersten
  2241. Aufruf von Fsfirst überschrieben.
  2242.  
  2243. Siehe auch:    basep
  2244.  
  2245. -----
  2246. putscr - Wiederherstellen des Bildschirminhalts
  2247.  
  2248. Syntax: putscr [-(f|s Dateiname)]
  2249.  
  2250. Ein zuvor mit getscr gespeicherter Bildschirminhalt wird wiederhergestellt.
  2251. Es ist möglich, einen einmal gespeicherten Bildschirm mehrmals zu restau-
  2252. rieren.
  2253.  
  2254. Flags:
  2255.     -f    Der Speicherbereich wird freigegeben. Das Bild wird nicht
  2256.         wiederhergestellt.
  2257.     -s    Der Speicherbereich wird in die angegebene Datei gespeichert.
  2258.         Wenn eine Datei mit dem angegebenen Namen bereits existiert,
  2259.         wird sie überschrieben.
  2260.  
  2261. Beispiel:
  2262.     getscr - titel.doo
  2263.     putscr
  2264.     read
  2265.     cls
  2266.     putscr -f
  2267.             Mit dieser Befehlsfolge wird ein Doodle-Bild (32000
  2268.             Bytes) aus der Datei titel.doo geladen und angezeigt.
  2269.             Die Shell wartet auf einen Tastendruck, dann wird der
  2270.             Bildschirm gelöscht und der Speicherbereich wieder
  2271.             freigegeben.
  2272.             Mit dieser Befehlsfolge kann ein Shellscript, z.B.
  2273.             das Profile, eine Grafik als Titelbild ausgeben.
  2274.  
  2275.     getscr
  2276.     putscr -s shell.doo
  2277.     putscr -f
  2278.             Der aktuelle Bildschirminhalt wird im Doodle-Format
  2279.             in die Datei shell.doo gespeichert (Hardcopy).
  2280.  
  2281.  
  2282. Siehe auch: getscr
  2283.         showpic (externes Kommando)
  2284.  
  2285. -----
  2286. pwd - Ermitteln des aktuellen Directories
  2287.  
  2288. Syntax: pwd [-a|{Drive}]
  2289.  
  2290. Schreibt das aktuelle Verzeichnis der angegebenen Laufwerke oder, wenn
  2291. kein Laufwerk angegeben ist, das aktuelle Verzeichnis des aktuellen
  2292. Laufwerks nach StdOut. Wenn -a angegeben ist, werden die aktuellen Verzeich-
  2293. nisse aller angeschlossenen Laufwerke ausgegeben.
  2294. pwd ohne Laufwerksangabe entspricht "echo $CWD".
  2295.  
  2296. Beispiele:
  2297.     pwd A: B: C: D: E: F:    ist äquivalent zu
  2298.     pwd abcdef        oder, wenn das alle Laufwerke sind, zu
  2299.     pwd -a
  2300.  
  2301. -----
  2302. raw - Ausgabe auf der "Raw Console"
  2303.  
  2304. Syntax: raw [-bnc] {Datei}
  2305.  
  2306. Als "Raw Console" oder RAWCON wird der Bildschirm ohne VT52-Emulator und
  2307. Steuerzeicheninterpretation bezeichnet. Die Ausgabe eines CR-Zeichens nach
  2308. RAWCON erzeugt also kein Zeilenende, sondern das "CR"-Schriftzeichen. Mit
  2309. dem Kommando raw kann eine Datei (oder StdIn, wenn keine Datei angegeben
  2310. ist) auf RAWCON ausgegeben werden. Am Ende der Datei wird jedoch ein
  2311. Zeilenvorschub eingefügt, damit das nächste Prompt in einer neuen Zeile
  2312. erscheint. Das kann mit dem Flag -c unterbunden werden.
  2313.  
  2314. Flags:    -b    die Datei wird binär geöffnet, es findet also keine Über-
  2315.         setzung CR/LF -> LF statt.
  2316.     -n    alle CR-Zeichen werden statt über RAWCON über den VT52-
  2317.         emulator ausgegeben, bewirken also tatsächliche Zeilen-
  2318.         vorschübe. Alle anderen Zeichen werden nicht übersetzt.
  2319.     -c    die Ausgabe eines Zeilenvorschubs am Ende jeder Datei
  2320.         wird unterbunden.
  2321.  
  2322. Beispiele:
  2323.  
  2324.     raw cmds2.o cmds3.o cmds4.o
  2325. gibt die angegebenen Dateien auf RAWCON aus. An Ende jeder Datei wird ein
  2326. Zeilenvorschub erzeugt.
  2327.  
  2328.     hd -b data.bin | raw -n
  2329. Der Hexdump wird auf RAWCON ausgegeben. CR-Zeichen im Hexdump bewirken
  2330. tatsächliche Zeilenvorschübe in der Ausgabe.
  2331.  
  2332. Bemerkung:
  2333. 1) Die Ausgabe erfolgt mit der Bios-Funktion Bconout.
  2334. 2) Dieses Kommando erzeugt keine Ausgabe nach StdOut, kann also nicht
  2335. umgeleitet werden.
  2336.  
  2337. -----
  2338. rdti - Konfiguration der Shell mittels desktop.inf
  2339.  
  2340. Syntax: rdti [-dclxv] [Datei]
  2341.  
  2342. Mit diesem Kommando ist es möglich, einige Konfigurationen der Shell direkt
  2343. aus der desktop.inf-Datei zu lesen, die vom Desktop beim Systemstart be-
  2344. nutzt wird. Diese Informationen sind:
  2345.     aktuelles Directory,
  2346.     Bezeichnungen der Laufwerke,
  2347.     Extender für ausführbare Programme.
  2348. Jede dieser Eigenschaften läßt sich mit einem der Flags ausblenden, so
  2349. daß man sich beim Aufruf von rdti die gewünschten Konfigurationen ein-
  2350. stellen kann. Wenn keine Flags angegeben sind, werden alle diese Ini-
  2351. tialisierungen durchgeführt.
  2352. Wenn keine Datei angegeben ist, wird die Datei /desktop.inf auf dem
  2353. Bootlaufwerk benutzt. Es kann nur eine Datei angegeben werden, Wildcards
  2354. sind nicht erlaubt, der Aufruf "rdti c:/desk*.inf" ist also unzulässig.
  2355.  
  2356. Flags:
  2357.     -d    Wenn dieses Flag nicht angegeben ist, wird das Directory
  2358.         von jedem geöffneten Fenster ausgegeben.
  2359.     -c    Wenn dieses Flag nicht angegeben ist, wird ein cd in
  2360.         das Directory von jedem geöffneten Fenster ausgeführt.
  2361.         Auf diese Weise kann man das aktuelle Directory auf das
  2362.         des obersten Fensters einstellen.
  2363.     -l    Wenn dieses Flag nicht angegeben ist, liest die Shell die
  2364.         Bezeichnungen der Laufwerke (die im Desktop unter den
  2365.         Laufwerk-Icons stehen). Diese Bezeichnungen werden z.B.
  2366.         von den internen Kommandos drive und df benutzt. Die
  2367.         alten Einstellungen der Bezeichnungen gehen dabei ver-
  2368.         loren.
  2369.     -x    Wenn dieses Flag nicht angegeben ist, initialisiert die
  2370.         Shell die Variable XEXT anhand der Extender, die in der
  2371.         Datei als Extender von ausführbaren Programmen (egal ob
  2372.         GEM, TOS oder TTP) eingetragen sind. Der alte Inhalt von
  2373.         XEXT geht dabei verloren, es sei denn, in der Datei sind
  2374.         keine Extender definiert.
  2375.     -v    Wenn dieses Flag angegeben ist, gibt rdti Informationen
  2376.         über den Dateinamen sowie die durchgeführten Konfigura-
  2377.         tionen aus.
  2378.  
  2379. Siehe auch:    drive
  2380.  
  2381. -----
  2382. read - Eingabe von Variablen
  2383.  
  2384. Syntax: read [[-] Var]
  2385.  
  2386. Eine Zeile wird von StdIn gelesen und, falls vorhanden, in der Variablen
  2387. Var abgelegt. Falls eine Variable mit Namen Var bereits existiert, so wird
  2388. der alte Wert überschrieben.
  2389. Wenn das Flag - angegeben ist, werden in der Eingabe Steuersequenzen und
  2390. Shellvariablen expandiert.
  2391.  
  2392. Beispiele:
  2393. 1) Einlesen einer Benutzereingabe:
  2394.     echo Bitte geben Sie Ihren Namen ein
  2395.     read NAME
  2396.     echo Der Name ist $NAME
  2397.         
  2398. 2) Einlesen der Anzahl der freien RAM-Bytes in eine Variable:
  2399.     mem | read RAM
  2400.     echo Es sind $RAM Bytes frei
  2401.    (ist analog zu "RAM=`mem`")
  2402.  
  2403. 3) Warten auf Druck auf ENTER
  2404.     echo Bitte ENTER drücken
  2405.     read
  2406.  
  2407. 4) Benutzung des Flags "-":
  2408.     read x
  2409.     $PATH                <------------- Eingabe
  2410.    speichert die Zeichenkette "$PATH" in der Variablen x.
  2411.     read - x
  2412.     $PATH                <------------- Eingabe
  2413.    speichert den Wert der Shellvariablen PATH in der Variablen x.
  2414.    
  2415. -----
  2416. readonly - Variablen schreibschützen
  2417.  
  2418. Syntax: readonly [[-] {Variable}]
  2419.  
  2420. Schreibgeschützte Variablen können nicht gelöscht und ihre Werte können
  2421. nicht verändert werden. Mit dem readonly-Kommando kann das Schreibschutz-
  2422. Flag von Variablen gesetzt und gelöscht werden.
  2423. Wenn readonly ohne Parameter aufgerufen wird, wird eine Liste aller schreib-
  2424. geschützter Variablen ausgegeben.
  2425. Ansonsten wird das Schreibschutz-Flag bei allen angegebenen Variablen ge-
  2426. setzt oder, wenn - angegeben ist, gelöscht.
  2427. Die Namen der Variablen können dabei im Format der erweiterten Wildcards
  2428. angegeben werden, z.B. "readonly a*" betrifft alle Variablen, deren Name
  2429. mit a beginnt. Näheres siehe okami.doc.
  2430. Es können nur Variablen schreibgeschützt werden, die vom Benutzer angelegt
  2431. oder verändert worden sind, also den Status "USR" haben (siehe "vars").
  2432. Um Variablen schreibzuschützen, die von der Shell selber angelegt wurden,
  2433. z.B. PIPDIR, hilft folgender Trick:
  2434.     PIPDIR=$PIPDIR
  2435.     readonly PIPDIR
  2436. Durch die Zuweisung wird der Wert der Variablen nicht verändert, die
  2437. Variable erhält aber den USR-Status.
  2438.  
  2439. Beispiele:
  2440.     readonly
  2441.                 erzeugt eine Liste aller schreibgeschützter
  2442.                 Variablen.
  2443.     readonly VAR1 VAR2 KEY
  2444.                 die Variablen VAR1, VAR2 und KEY werden
  2445.                 schreibgeschützt.
  2446.     readonly - VAR1 KEY
  2447.                 der Schreibschutz der Variablen VAR1 und
  2448.                 KEY wird entfernt.
  2449.     readonly *E*
  2450.                 alle Variablen, deren Name ein E enthält,
  2451.                 werden schreibgeschützt.
  2452.  
  2453. Siehe auch: export
  2454.  
  2455. -----
  2456. rm - Löschen von Dateien
  2457.  
  2458. Syntax: rm [-fi] File {File}
  2459.  
  2460. Alle Dateien, die einem der Muster File entsprechen, werden gelöscht.
  2461.  
  2462. Flags:    -f    Es werden keine Fehlermeldungen bzgl. fehlenden Dateien
  2463.         ausgegeben. Außerdem werden auch Dateien, bei denen das
  2464.         Read Only-Flag gesetzt ist, gelöscht.
  2465.     -i    Es wird interaktiv gelöscht, d.h. der Anwender wird bei
  2466.         jeder Datei gefragt, ob er diese löschen will oder nicht.
  2467.         Als Ja gelten die Eingabe eines Wortes, das mit y oder Y
  2468.         beginnt, sowie ein Druck auf ENTER ohne Eingabe.
  2469.         Als Nein gilt jede andere Eingabe.
  2470.  
  2471. Rückgabewert:
  2472.     -1    Aufruffehler
  2473.     sonst    Anzahl der gelöschten Dateien.
  2474.  
  2475. -----
  2476. rmdir - Löschen von Ordnern
  2477.  
  2478. Syntax: rmdir Path
  2479.  
  2480. Der Ordner Path wird gelöscht. Es dürfen keine Dateien oder Unterordner
  2481. in Path enthalten sein.
  2482.  
  2483. Rückgabewert: Anzahl der gelöschten Ordner.
  2484.  
  2485. -----
  2486. rpn - SIEHE upn
  2487.  
  2488. -----
  2489. rsconf - Konfiguration der RS232-Schnittstelle
  2490.  
  2491. Syntax: rsconf [-s(Speed] [(+|-)x] [(+|-)r] [-p(0|1|2)] [-b(Bits)] [-w(Word)]
  2492.  
  2493. Die serielle Schnittstelle (Modemport) wird konfiguriert. Die Parameter
  2494. haben folgende Bedeutung:
  2495.  
  2496.     -s    Übertragungsgeschwindigkeit. Mögliche Werte für Speed sind:
  2497.         19200, 9600,4800,3600,2400,2000,1800,1200,600,300,200,
  2498.         150,134,110,75,50 (alles in baud). Der Defaultwert ist 9600.
  2499.     -x    XON/XOFF wird abgeschaltet    (Default).
  2500.     +x    XON/XOFF wird eingeschaltet.
  2501.     -r    RTS/CTS  wird abgeschaltet    (Default).
  2502.     +r    RTS/CTS  wird eingeschaltet.
  2503.     -p    Parität. Mögliche Angaben sind:
  2504.         0 (keine Parität), 1 (ungerade), 2 (gerade). Der Default-
  2505.         wert ist 0.
  2506.     -b    Anzahl der Start- und Stopbits. Mögliche Angaben:
  2507.         Bits    Startbits    Stopbits    Übertragung
  2508.         0    0        0        Synchron  (Default)
  2509.         1    1        1        Async.
  2510.         1.5    1        1.5        Async.
  2511.         2    1        2        Async.
  2512.     -w    Wortlänge. Mögliche Angaben für Word sind:
  2513.         8,7,6,5 (in bits). Der Defaultwert ist 8.
  2514.  
  2515. Beispiele:
  2516.     rsconf
  2517.         stellt ein: 9600 baud, kein XON/XOFF, kein RTS/CTS, keine
  2518.         Parität, 0 Start- und Stopbits, Wortlänge 8 bit.
  2519.     rsconf -s4800
  2520.         wie oben, nur mit 4800 baud.
  2521.     rsconf -s19600 +x +r -p1 -b2 -w7
  2522.         stellt ein: 19600 baud, XON/XOFF, RTS/CTS, ungerade Pari-
  2523.         tät, 1 Startbit, 2 Stopbits, Wortlänge 7 bit.
  2524.  
  2525. -----
  2526. scr - Einstellen der Bildschirmfarbe
  2527.  
  2528. Syntax: scr [-bwlh]
  2529.  
  2530. Einstellen von Hinter- und Vordergrundfarbe sowie der Anzahl der Zeilen auf
  2531. dem Bildschirm (nur in hoher Auflösung sinnvoll).
  2532. Flags:    -b (black)    Einstellen von dunklem Hinter- und hellem Vorder-
  2533.             grund.
  2534.     -w (white)    Einstellen von hellem Hinter- und dunklem Vorder-
  2535.             grund.
  2536.     -l (low)    Einstellen von 24 Zeilen (normale Schrift).
  2537.     -h (high)    Einstellen von 48 Zeilen (kleine Schrift).
  2538.  
  2539. Für die Einstellung der Zeilenanzahl mit -l und -h gilt:
  2540.  
  2541. 1) gon muß aktiv sein.
  2542. 2) Nach der Einstellung wird der Bildschirm gelöscht.
  2543. 3) Die neue Zeilenanzahl wird in der Shellvariablen COLUMNS abgelegt.
  2544. 4) Die Einstellung beruht auf einer undokumentierten VDI-Funktion, zu
  2545.    der das Profi-Buch sagt: "Verwendung auf eigene Gefahr". Abstürze sind
  2546.    möglich.
  2547.  
  2548. Siehe auch:    cursor
  2549.         keyb
  2550.         mouse
  2551.  
  2552. -----
  2553. set - Einstellen von Shell-Flags
  2554.  
  2555. Syntax: set [-|([+Flags] [-Flags])]
  2556.  
  2557. Es wird ein Shell-Flag gesetzt oder gelöscht, oder es wird der Status
  2558. aller Shell-Flags ausgegeben.
  2559. Bei der Verwendung ohne Parameter wird der Status aller Shell-Flags
  2560. mit einer kurzen Erklärung des jeweiligen Flags ausgegeben.
  2561. Bei der Verwendung mit dem Parameter - wird der Status aller Shell-Flags
  2562. in einer Form ausgegeben, die später als Parameter für set benutzt werden
  2563. kann. Dies ist nützlich, wenn in einem Shellscript ein Flag lokal geändert
  2564. werden soll:
  2565.     a=`set -`
  2566.     set +x
  2567.     ................... (irgendwelche Kommandos)
  2568.     set $a
  2569.     a=
  2570. Der Status der Flags wird in die Variable a eingelesen. Diese Variable wird
  2571. später benutzt, um die Änderung (set +x) ggfs. rückgängig zu machen.
  2572.  
  2573. Bei der Verwendung mit einem anderen Parameter als einem einzelnen Minus-
  2574. zeichen wird das entsprechende Flag gesetzt (+) oder zurückgesetzt (-).
  2575. Beispiel: set +x setzt das Flag x.
  2576.       set -x löscht das Flag x.
  2577.  
  2578. Die folgenden Flags können benutzt werden:
  2579.  
  2580.     b    Wenn dieses Flag gesetzt ist, wird in einer Eingabezeile
  2581.         jeder Slash (/) in einen Backslash (\) umgeformt. Dadurch
  2582.         ist es möglich, Pfadnamen wie in Unix üblich mit Slashes
  2583.         zu trennen (was einfacher ist, da man auf dem ST für einen
  2584.         Slash zwei, für einen Backslash aber drei Tasten gleich-
  2585.         zeitig drücken muß). Wenn das Flag nicht gesetzt ist, werden
  2586.         keine Slashes in Backslashes umgeformt.
  2587.         Die Umformung betrifft sämtliche Eingaben, also auch Zu-
  2588.         weisungen an Variablen, Zeilen aus Shellscripts etc.
  2589.         Nach dem Start der Shell ist dieses Flag gesetzt.
  2590.  
  2591.     l    Wenn dieses Flag gesetzt ist, werden Dateinamen in
  2592.         Kleinbuchstaben ausgegeben. Wenn das Flag nicht gesetzt ist,
  2593.         werden Dateinamen so ausgegeben, wie sie auf der Diskette
  2594.         gespeichert sind (in Großbuchstaben).
  2595.         Dieses Flag beeinflußt nicht die Möglichkeit, Dateinamen
  2596.         in Kleinbuchstaben einzugeben.
  2597.         Nach dem Start der Shell ist dieses Flag gesetzt.
  2598.  
  2599.     s    Wenn dieses Flag gesetzt ist, schreibt die Shell nach dem
  2600.         Programmende durch Eingabe von exit oder shutdown oder 
  2601.         durch Druck auf Ctrl V das aktuelle Directory ($CWD) in
  2602.         die Datei $HOME\wdir. Die Datei wird unsichtbar gemacht.
  2603.         Wenn das Profile ($HOME\profile) folgende Zeilen enthält:
  2604.             set +s
  2605.             read a < $HOME\wdir
  2606.             cd $a
  2607.         dann wird die Shell nach jedem Aufruf auf das Directory
  2608.         eingestellt, in dem sie zuletzt verlassen wurde. Dies ist
  2609.         sehr sinnvoll beim Einsatz einer Festplatte.
  2610.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  2611.  
  2612.     x    Vor dem Ausführen einer Binärdatei (PRG, TOS etc.) wird
  2613.         das aktuelle Verzeichnis auf das Verzeichnis umgestellt,
  2614.         in dem sich die Datei befindet. Nach der Ausführung der
  2615.         Datei wird das aktuelle Verzeichnis wieder zurückgesetzt.
  2616.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  2617.  
  2618.     c    Vor dem Ausführen eines Shellscripts wird das aktuelle
  2619.         Verzeichnis auf das Verzeichnis umgestellt, in dem sich 
  2620.         das Shellscript befindet. Nach dem Ende des Scripts wird
  2621.         das aktuelle Verzeichnis wieder zurückgesetzt.
  2622.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  2623.  
  2624.     h    Wenn dieses Flag gesetzt ist, wird die Datei, aus der bei
  2625.         Druck auf Help die Hilfstexte zu den einzelnen Kommandos
  2626.         gelesen werden (i.d.R. diese Datei, commands.doc), resident
  2627.         im Speicher gehalten. Wenn das Flag nicht gesetzt ist, wird
  2628.         die Datei bei jedem Druck auf Help neu geladen. Nach dem
  2629.         Start der Shell ist dieses Flag gesetzt, und der einzige
  2630.         Grund, es zu löschen, ist Speicherplatzmangel. Um ein resi-
  2631.         dentes Helpfile aus dem Speicher zu entfernen, dieses Flag
  2632.         löschen (set -h), ein beliebiges Kommando eingeben und Help
  2633.         drücken.
  2634.         Nach dem Start der Shell ist dieses Flag gesetzt.
  2635.  
  2636.     u    Wenn dieses Flag gesetzt ist, werden die Standard-Streams,
  2637.         also die Dateien, die für die Ein-Ausgabe-Umleitung und
  2638.         das Pipelining benutzt werden, im Binärmodus geöffnet. Das
  2639.         bedeutet, daß in der Ein- und Ausgabe über diese Dateien
  2640.         die Übersetzung zwischen CR/LR und CR abgeschaltet wird.
  2641.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  2642.  
  2643.     w    Wenn dieses Flag gesetzt ist, interpretiert die Shell die
  2644.         erweiterten Wildcards * und []. Wenn das Flag nicht gesetzt
  2645.         ist, werden alle Wildcards wie unter TOS behandelt. Dies be-
  2646.         trifft nur die Angabe von Dateinamen, nicht die sonstige Ver-
  2647.         wendung der erweiterten Wildcards z.B. bei Verwendung der
  2648.         Help-Taste.
  2649.         Nach dem Start der Shell ist dieses Flag gesetzt.
  2650.  
  2651.     p    Wenn dieses Flag gesetzt ist, wird beim Start von Binärpro-
  2652.         grammen diesen die Ein/Ausgabeumleitung in der Kommandozeile
  2653.         übergeben, und zwar in der Form "<Eingabedatei >Ausgabedatei".
  2654.         Vorher wird die Umleitung auf Gemdos-Basis rückgängig gemacht.
  2655.         Wenn das Flag nicht gesetzt ist, wird die Ein/Ausgabe aus-
  2656.         schließlich mit der Gemdos-Funktion Fforce umgeleitet, den
  2657.         Binärprogrammen wird also kein Dateiname übergeben. Dies ist
  2658.         die Normaleinstellung, die nur in extremen Sonderfällen ge-
  2659.         ändert werden sollte.
  2660.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  2661.  
  2662. -----
  2663. shutdown - Abschalten oder Neubooten von Rechner und Festplatte
  2664.  
  2665. Syntax: shutdown [-rRfv]
  2666.  
  2667. Wenn eins der Flags -r und -R angegeben ist, wird nach einer Sicherheits-
  2668. abfrage ein Warmstart (bei -r) oder Kaltstart (bei -R) durchgeführt.
  2669.  
  2670. Wenn keins der Flags -r und -R angegeben ist, wird der Rechner bereit zum
  2671. Abschalten gemacht. Nach einer Sicherheitsabfrage werden alle Streams ge-
  2672. schlossen sowie Maus und Cursor abgeschaltet.
  2673. Wenn die Datei $HOME\bin\ship.exe vorhanden ist, wird sie geladen und
  2674. ausgeführt (als Binärprogramm). Festplattenbenutzer sollten hierhin
  2675. das SHIP.PRG der Harddisk-Utility-Diskette kopieren. Damit wird auch die
  2676. Festplatte zum Abschalten bereit gemacht.
  2677. Laut Handbuch der Atari-Festplatte kann diese zwar jederzeit abgeschaltet
  2678. werden, und SHIP.PRG braucht nur vor einem Transport gestartet zu werden.
  2679. Trotzdem ist es sinnvoll, die Platte vor jedem Abschalten zu parken, da
  2680. ansonsten der Schreib-Lesekopf wie ein Damoklesschwert über den empfind-
  2681. lichen Daten hängt.
  2682. Wenn weitere Aktionen beim Shutdown erwünscht sind, kann man ein Programm
  2683. schreiben, das diese Aktionen ausführt, und dieses nach $HOME\bin\ship.exe
  2684. kopieren. Dieses Programm kann das Harddisk-Ship-Programm dann per Pexec
  2685. aufrufen.
  2686. Danach wird die Meldung "...shutdown completed..." ausgegeben, und das
  2687. System läuft in eine Endlosschleife, die nur durch einen Reset verlassen
  2688. werden kann.
  2689.  
  2690. Wenn beim Laden und Starten von ship.exe ein Fehler auftritt, wird shutdown
  2691. abgebrochen.
  2692.  
  2693. Flags:
  2694.     -r    Warmstart. Die Festplatte wird nicht geparkt, das Programm
  2695.         $HOME\bin\ship.exe wird nicht ausgeführt.
  2696.     -R    Wie -r, aber Kaltstart.
  2697.     -f    Es erfolgt keine Sicherheitsabfrage. Wenn beim Laden und
  2698.         Starten von ship.exe ein Fehler auftritt, wird shutdown
  2699.         nicht abgebrochen.
  2700.     -v    Vor jeder Aktion wird eine entsprechende Meldung auf den
  2701.         Bildschirm geschrieben. Ist ohne Wirkung bei -r und -R,
  2702.         da es hier keine Aktionen gibt, zu denen sich irgendwelche
  2703.         Meldungen lohnen würden, außerdem hätte man nicht viel
  2704.         Zeit, die Meldungen zu lesen.
  2705.  
  2706. -----
  2707. sleep - eine Weile warten
  2708.  
  2709. Syntax: sleep [-sm] n
  2710.  
  2711. Dieses Kommando legt eine Pause von n Sekunden ein.
  2712. Wenn gon aktiv ist, wird zum Warten die AES-Funktion evnt_timer aufgerufen,
  2713. wodurch in der Wartezeit die Multitasking-Accessories zum Zuge kommen. Der
  2714. Nachteil ist, daß hier die Wartezeit nicht allzu genau ist; bei aktivem
  2715. gon ergab "time sleep 1" Zeiten zwischen 0.2 und 1.1 Sekunden.
  2716. Wenn gon nicht aktiv ist, wird zum Warten eine Warteschleife benutzt, die
  2717. den 200-Hz-Systemtimer abfragt. Hierbei kommt "time sleep 1" konstant auf
  2718. 1.01 Sekunden.
  2719.  
  2720. Flag:    -s    Es wird n Timer-Zyklen zu je 1/200 Sekunden gewartet.
  2721.         "sleep 1" ist also äquivalent zu "sleep -s 200". Es wird
  2722.         in einer Warteschleife gewartet, auch wenn gon aktiv ist.
  2723.     -m    Es wird n Millisekunden gewartet. "sleep 1" ist also auch
  2724.         äquivalent zu "sleep -m 1000". Dieses Flag hat nur Sinn,
  2725.         wenn gon aktiv ist, ansonsten wird nicht n Millisekunden,
  2726.         sondern n/5 Timer-Zyklen zu je 1/200 Sekunden gewartet.
  2727.  
  2728. -----
  2729. sort - Sortieren der Standardeingabe
  2730.  
  2731. Syntax: sort [-lnrs]
  2732.  
  2733. Das sort-Kommando ist ein Filter, d.h. es liest seine Standard-Eingabe
  2734. (StdIn), macht etwas damit und schreibt das Ergebnis zur Standard-Aus-
  2735. gabe (StdOut).
  2736. sort liest Zeilen von StdIn und gibt sie in sortierter Reihenfolge wieder
  2737. aus. Die Maximalanzahl der Zeilen ist 500. (Wer mehr braucht, kann dafür
  2738. den Software-Support benutzen. Die tatsächliche Anzahl der Zeilen einer
  2739. Shellversion kann mit "ver -l" ermittelt werden.)
  2740.  
  2741. Flags:
  2742.     -l    Es wird nach der Länge der Zeilen sortiert, die kürzeste
  2743.         Zeile kommt zuerst.
  2744.     -n    Es wird numerisch sortiert. Die Eingabezeilen werden als
  2745.         Zahlenangaben betrachtet (die mit %, 0 und 0x beginnen
  2746.         dürfen, um binäre, oktale oder hexadezimale Zahlen zu
  2747.         kennzeichnen) und in aufsteigender Reihenfolge sortiert,
  2748.         d.h. die kleinste Zahl kommt zuerst.
  2749.     -r    Die Sortierreihenfolge wird umgekehrt.
  2750.     -s    Die Strings werden nicht verkürzt. Wenn dieses Flag nicht
  2751.         angegeben ist, werden führende und endende Leer- und
  2752.         Tabulatorzeichen entfernt. Dies ist notwendig, wenn z.B
  2753.         mit "ls | sort -l" eine Dateiliste nach der Länge der
  2754.         Dateinamen sortiert werden soll, da in der Ausgabe des
  2755.         ls-Kommandos alle Dateinamen mit Leerzeichen auf 14 Zeichen
  2756.         Länge gebracht werden. 
  2757.  
  2758. Wenn keins der Flags l und n angegeben ist, wird nach lexikographischer
  2759. Reihenfolge sortiert (mit der strcmp-Funktion, alle Kleinbuchstaben kommen
  2760. daher nach allen Großbuchstaben).
  2761. Zum Sortieren wird der Quicksort-Algorithmus benutzt.
  2762.  
  2763. -----
  2764. tee - T-Kreuzung der Eingabe
  2765.  
  2766. Syntax: tee File
  2767.  
  2768. StdIn wird nach StdOut und nach File kopiert.
  2769.  
  2770. -----
  2771. test - Auswerten von logischen Ausdrücken
  2772.  
  2773. Syntax: test Ausdruck
  2774. oder    [ Ausdruck ]
  2775.  
  2776. Das test-Kommando wird normalerweise in Verbindung mit if benutzt.
  2777. Der Rückgabewert ist 1, wenn der Ausdruck wahr ist, und 0 sonst. test er-
  2778. zeugt keine Ausgabe.
  2779. Der Ausdruck kann eins der folgenden Formate haben:
  2780.  
  2781.         Dateioperationen:
  2782. -f file     Wahr, wenn file existiert.
  2783. -x file     Wahr, wenn file ausführbar ist.
  2784. -d file     Wahr, wenn file ein Directory ist.
  2785. -g file     Wahr, wenn file ein GEM-Programm ist ($GEXT).
  2786.         Variablenoperationen:
  2787. +v var        Wahr, wenn var der Name einer gesetzten Shellvariablen ist.
  2788. -v var        Wahr, wenn es keine Shellvariable namens var gibt.
  2789.         Stringoperationen:
  2790. a = b        Wahr, wenn die Strings a und b gleich sind.
  2791. a != b        Wahr, wenn die Strings a und b ungleich sind.
  2792. a -t b        Wahr, wenn das Kommando a auf eine der Typen b ausgeführt
  2793.         werden kann. Mögliche Typen sind:
  2794.             f    Shellfunktion
  2795.             i    internes Kommando
  2796.             s    Shellscript
  2797.             b    Binärprogramm
  2798.             n    Kommando nicht gefunden
  2799.         Es können beliebig viele dieser Typen angegeben werden.
  2800.  
  2801.         Die folgenden numerischen Operationen vergleichen zwei
  2802.         Zahlen x und y:
  2803. x -eq y     x =  y
  2804. x -ne y     x != y
  2805. x -lt y     x <  y
  2806. x -gt y     x >  y
  2807. x -le y     x <= y
  2808. x -ge y     x >= y
  2809.  
  2810. Achtung: bei -v und +v muß der Name einer Variablen angegeben werden und
  2811. nicht der Inhalt, also z.B. "test +v TERM" und nicht "test +v $TERM".
  2812.  
  2813. Beispiele: siehe if.
  2814.  
  2815. -----
  2816. then - SIEHE if
  2817.  
  2818. -----
  2819. time - Stoppuhr für Programme
  2820.  
  2821. Syntax: time Kommando {Parameter}
  2822.  
  2823. Fuehrt Kommando mit den angegebenen Parametern aus und schreibt die
  2824. Laufzeit in Minuten, Sekunden und 1/100 Sekunden auf den Bildschirm.
  2825. Das Ermitteln der Zeit geschieht mittels des 200 Hz-Systemtimers.
  2826.  
  2827. -----
  2828. touch - Erneuern oder Anlegen von Dateien
  2829.  
  2830. Syntax: touch File {File}
  2831.  
  2832. Wenn File bereits existiert, werden Datei-Datum und -Zeit auf die aktuelle
  2833. Systemzeit gesetzt. Wenn File noch nicht existiert, wird eine Datei mit
  2834. dem Namen File angelegt.
  2835.  
  2836. Rückgabewert:
  2837.     -1    Aufruffehler
  2838.     1    Die Datei ist erzeugt worden.
  2839.     0    Das Dateidatum einer existierenden Datei wurde geändert.
  2840. Hierbei bezieht sich der Wert auf die letzte behandelte Datei.
  2841.  
  2842. -----
  2843. tr - Filter
  2844.  
  2845. Syntax: tr Filter
  2846.  
  2847. Filtert StdIn nach StdOut, abhaengig von den Angaben in Filter.
  2848. Jede Zeile in der Datei Filter (bis auf Leerzeilen oder Zeilen, die mit
  2849. # (Doppelkreuz) anfangen), bestimmt ein Zeichen. Die Zeilen haben den
  2850. Aufbau
  2851.  
  2852. s d
  2853.  
  2854. wobei s und d in dezimaler, hexadezimaler, oktaler oder Ascii-Schreibweise
  2855. angegebene Werte zwischen 0 und 255 sind.
  2856. Bsp: um in StdIn jedes A (grosses A) in B (grosses B) zu filtern, kann
  2857. z.B. eine der folgenden Zeilen in Filter stehen:
  2858.  
  2859.     !A  !B            (Character-Schreibweise)
  2860.     65  !B            (dezimale Schreibweise)
  2861.     0x41 !B         (hexadezimale Schreibweise)
  2862.     0101 !B         (oktale Schreibweise)
  2863.  
  2864. Auch B kann in jedem der Fälle in jeder der vier Schreibweisen
  2865. angegeben werden.
  2866.  
  2867. Beispiel:
  2868.     tr tab.tr <datei.txt >prt:
  2869. filtert die Datei datei.txt mit der Filterdatei tab.tr. Das Ergebnis wird
  2870. zum paralellen Drucker (prt:) geschickt.
  2871.  
  2872. Wesentlich leistungsfähiger, aber komplizierter in der Anwendung ist das
  2873. externe Kommando sed.
  2874.  
  2875. -----
  2876. trap - Definieren eines Kommandos zum Beenden der Shell
  2877.  
  2878. Syntax: trap [-|[+]Kommando {Parameter}]
  2879.  
  2880. Es wird ein Shell-Kommando definiert, das nach dem Beenden der Shell mit
  2881. exit oder Control-V aufgerufen wird. Das Trap-Kommando wird nur beim Beenden
  2882. der Shell selber ausgeführt, nicht beim Beenden eines Shell-Scripts mit exit
  2883. oder bei einem shutdown.
  2884. Beim Aufruf ohne Parameter wird das aktuelle Trap-Kommando ausgegeben.
  2885. Beim Aufruf mit einem Minuszeichen wird das Trap-Kommando gelöscht.
  2886. Beim Aufruf mit einem anderen Parameter als einem Minuszeichen wird dieser
  2887. Parameter als Trap-Kommando gespeichert. Wenn der Parameter mit einem Plus-
  2888. zeichen beginnt, wird das Pluszeichen entfernt und der Rest an das bisherige
  2889. Trap-Kommando angehängt.
  2890.  
  2891. Beispiele:
  2892.     trap echo hallo
  2893.             definiert "echo hallo" als das Kommando, das nach
  2894.             einem exit ausgeführt werden soll.
  2895.     trap
  2896.             gibt das zuvor definierte Kommando aus.
  2897.     trap -
  2898.             löscht die Einstellung.
  2899.     trap cls ^; echo Byebye
  2900.             löscht beim Ende der Shell den Bildschirm und
  2901.             schreibt "Byebye". Nach Eingabe von trap ohne
  2902.             Parameter erscheint von da an "cls ; echo Byebye".
  2903.     trap cls ; echo Byebye
  2904.             löscht beim Ende der Shell nur den Bildschirm,
  2905.             "Byebye" wird sofort geschrieben.
  2906.     trap `trap` ^; echo Byebye
  2907.             hängt das Kommando "echo Byebye" an den aktuellen
  2908.             trap-String an.
  2909.     trap +echo Byebye
  2910.             ebenso.
  2911.  
  2912. Eine sinnvolle Anwendung ist
  2913.     trap cursor -v
  2914. im Profile. Dadurch wird verhindert, daß nach dem Ende der Shell der
  2915. Cursor auf dem Desktop weiterhin sichtbar ist.
  2916.  
  2917. Anmerkung: Wer ständig mit gon arbeitet, braucht goff nicht durch das trap-
  2918. Kommando geben zu lassen, da goff bei Ende der Shell automatisch ausgeführt
  2919. wird.
  2920.  
  2921. Siehe auch:     exit
  2922.         history
  2923.  
  2924. -----
  2925. true - Rückgabe von 1
  2926.  
  2927. Syntax: true
  2928.  
  2929. Dieses Kommando liefert immer eine 1 zurück. Es wird normalerweise mit
  2930. dem while-Kommando geliefert.
  2931.  
  2932. Beispiel: Programmieren einer Endlosschleife. Sie kann durch "break" im
  2933. Schleifenrumpf beendet werden.
  2934.  
  2935.         while true
  2936.         do
  2937.           ............. (irgendwelche Kommandos)
  2938.         done
  2939.  
  2940. Siehe auch: while
  2941.         if
  2942.         false
  2943.  
  2944. -----
  2945. type - Ermitteln des Aufrufpfades eines Kommandos
  2946.  
  2947. Syntax: type -f Kommando {Kommando}
  2948.  
  2949. Es wird ausgegeben, unter welchem Pfad die Shell das Programm zu dem
  2950. angegebenen Kommando aufrufen würde. Wenn es sich um ein internes
  2951. Kommando handelt, erscheint die Meldung "... is a shell builtin".
  2952. Wenn es sich um eine Shellfunktion handelt, erscheint die Meldung
  2953. "... is a function", außerdem wird die Definition der Funktion ausgegeben
  2954. (falls das Flag -f nicht angegeben ist).
  2955.  
  2956. Benutzt werden die Shellvariablen $PATH für die Pfade, auf denen das
  2957. Kommando gesucht wird, sowie $XEXT und $SEXT für die zu untersuchenden
  2958. Dateinamen-Extender.
  2959. Beispiel: Es sei d:\shell\bin\test.prg eine Programmdatei. $PATH enthalte
  2960. den Pfad d:\shell\bin, $XEXT enthalte den Extender .prg (z.B.:
  2961. PATH=.,..,d:\shell,d:\shell\bin
  2962. XEXT=.prg,.tos,.ttp
  2963. Dann wird bei der Eingabe von "type test" der vollständige Pfadname
  2964. der Datei test.prg ausgegeben. Wenn das aktuelle Directory d:\shell\bin
  2965. ist, erzeugt "type test" die Ausgabe ".\test.prg".
  2966.  
  2967. Flag:    -f    Wenn dieses Flag angegeben ist, wird bei einer Shell-
  2968.         funktion nur die Zeile "... is a function" ausgegeben
  2969.         und nicht die vollständige Definition der Funktion.
  2970.  
  2971. Siehe auch unten unter "Externe Kommandos".
  2972.  
  2973. -----
  2974. upn, rpn - UPN-Rechner incl. Einheitenumrechner
  2975.  
  2976. Syntax: upn|rpn [%Fmt] UPN-Ausdruck
  2977.  
  2978. Mit diesem Kommando können beliebige mathematische Ausdrücke berechnet wer-
  2979. den. Die Ausdrücke werden in der umgekehrten polnischen Notation (UPN) an-
  2980. gegeben, weil (1) ich ein Fan von HP-Rechnern bin und (2) weil ein Auswerter
  2981. für UPN-Ausdrücke einfacher zu programmieren ist. Wer eher auf die englische
  2982. Schreibweise steht, kann dieses Kommando auch unter dem Namen "rpn" aufrufen.
  2983.  
  2984. Ein UPN-Ausdruck ist eine Folge von durch Leerzeichen (:= Space, Tab...)
  2985. getrennten Zahlen oder Operationen.
  2986. Eine Zahl hat das Format
  2987.     [-][Vorkommastellen][.Nachkommastellen][E Exponent]
  2988. Jede Zahl, die in einem UPN-Ausdruck steht, wird auf einen internen Stack
  2989. geschoben. Dieser Stack faßt bis zu 32 Zahlen. (Wer mehr braucht, kann den
  2990. Software-Support benutzen, um eine erweiterte Version der Shell zu bekommen.
  2991. Die tatsächliche Größe des Stacks kann mit "ver -l" ermittelt werden.)
  2992. Außerdem gelten die Symbole "pi" und "e" als Zahlen und schieben die Kreis-
  2993. zahl Pi bzw. die Eulersche Zahl e auf den Stack.
  2994. Als Operation gilt alles, was keine Zahl ist. Die Operationen nehmen 0,
  2995. 1 oder 2 Zahlen vom Stack, machen etwas damit und legen das Ergebnis auf
  2996. den Stack zurück.
  2997. Nachdem der ganze UPN-Ausdruck auf diese Weise ausgewertet wurde, wird das
  2998. oberste Stack-Element auf StdOut ausgegeben. Das dabei verwendete Format
  2999. kann angegeben werden; gemeint ist das Format für die printf-Funktion.
  3000. Das Format kann das Ergebnis als long- oder double-Zahl ausgeben, das Resul-
  3001. tat bei Verwendung eines anderen Formats (z.B. %s) ist undefiniert. Näheres
  3002. siehe ein beliebiges C-Handbuch.
  3003. Achtung:
  3004. (1) Es darf nur die Formatangabe gemacht werden, keinen weiteren Text ange-
  3005. ben (z.B. "upn '%Das Ergebnis ist %d' 2 2 +" ist falsch - benutze statt-
  3006. dessen "echo Das Ergebis ist `upn %ld 2 2 +`")
  3007. (2) Bei Integerformaten muß das long-Format angegeben werden, also nicht
  3008. "upn %d ...", sondern "upn %ld ...." (analog für %x). Ebenso sollte nicht %f,
  3009. sondern %lf für Fließkommaformate verwendet werden.
  3010.  
  3011. Der verwendete Stack ist global und behält seinen Inhalt über mehrere Auf-
  3012. rufe des upn-Kommandos hinweg. Man kann also z.B. mit "upn 123" eine Zahl
  3013. auf den Stack legen, dann weitere Kommandos ausführen und die Zahl dann
  3014. erst mit einem erneuten upn-Aufruf verarbeiten. Der Stack faßt maximal
  3015. 32 Zahlen. (Wer mehr braucht: Software-Support benutzen... Die tatsächliche
  3016. Stackgröße einer Shellversion kann mit "ver -l" ermittelt werden)
  3017.  
  3018. Eine Liste aller verfügbaren UPN-Funktionen findet sich in dieser Datei
  3019. zu dem Stichwort "upnfkt".
  3020.  
  3021. Eine komfortable Schnittstelle zum upn-Kommando ist das externe Kommando
  3022. calc (siehe dort).
  3023.  
  3024. Rückgabewert: Der ganzzahlige Anteil des obersten Stack-Elements (x).
  3025.  
  3026.  
  3027. Siehe auch:    upnfkt
  3028.         calc (externes Kommando)
  3029.  
  3030. -----
  3031. upnfkt - Funktionen des UPN-Rechners
  3032.  
  3033. Zur Bedienung des UPN-Rechners siehe das Stichwort upn. Dieser Abschnitt
  3034. erklärt alle Operationen, die im UPN-Rechner zur Verfügung stehen.
  3035.  
  3036. Im folgenden bedeutet x die oberste und y die zweitoberste Zahl auf dem
  3037. Stack. "x := x+y" bedeutet, daß zwei Zahlen vom Stack genommen und addiert
  3038. und daß das Ergebnis wieder auf den Stack gelegt wird.
  3039.  
  3040. Folgende Operationen sind vorhanden:
  3041.  
  3042. +,-,*,/,\    x := y +-*/ x        (Grundrechenarten)    (*)
  3043. %        x := y % x        (Modulo)
  3044. ++        x := x+1        (Inkrement)
  3045. --        x := x-1        (Dekrement)
  3046. chs        x := -x         (Vorzeichenwechsel)
  3047. rcp        x := 1/x        (Reziprokwert)
  3048. log        x := log (y) x        (Log. zur Basis y)
  3049. ln        x := ln x        (Log. zur Basis e)
  3050. lg        x := lg x        (Log. zur Basis 10)
  3051. ld        x := ld x        (Log. zur Basis 2)
  3052. deg        x := x * (180/Pi)    (Umrechnung Rad.->Deg.) (**)
  3053. grad        x := x * (200/Pi)    (Umrechnung Rad.->Grad) (**)
  3054. sin        x := sin x        (Sinus)
  3055. asin        x := arc sin x        (Arcus-Sinus)
  3056. cos        x := cos x        (Cosinus)
  3057. acos        x := arc cos x        (Arcus-Cosinus)
  3058. tan        x := tan x        (Tangens)
  3059. atan        x := arc tan x        (Arcus-Tangens)
  3060. sqrt        x := sqrt x        (Quadratwurzel)
  3061. sqr        x := x*x        (Quadrat)
  3062. exp        x := e hoch x
  3063. exp2        x := 2 hoch x
  3064. exp10        x := 10 hoch x
  3065. abs        x := |x|        (Betrag)
  3066. sign        x := signum x        (Vorzeichen: -1, 0, 1)
  3067. min        x := min {x,y}        (Minimum)
  3068. max        x := max {x,y}        (Maximum)
  3069. fact        x := x!         (Fakultät)
  3070. int        x := int x        (Vorkommastellen)
  3071. frac        x := frac x        (Nachkommastellen)
  3072. rand        x aus (0,1)        (Zufallszahl)
  3073. rnd        x := x gerundet auf 1. Vorkommastelle
  3074.  
  3075. Außerdem gibt es die folgenden Einheiten-Umrechenfunktionen, die jeweils
  3076. x umrechnen:
  3077.  
  3078.     in2mm    mm2in        (inch <-> Millimeter)
  3079.     ft2m    m2ft        (Foot <-> Meter)
  3080.     mi2km    km2mi        (Meilen <-> Kilometer)
  3081.     m2yd    yd2m        (Meter <-> Yards)
  3082.     m2nmi    nmi2m        (Meter <-> nautische Meilen)
  3083.     m2rod    rod2m        (Meter <-> Rod, was immer das ist)
  3084.     m2pc    pc2m        (Meter <-> Parsec)
  3085.     gal2l    l2gal        (Gallonen <-> Liter)
  3086.     lb2kg    kg2lb        (engl. Pfund <-> Kilogramm)
  3087.     kg2oz    oz2kg        (Kilogramm <-> Unzen)
  3088.     kg2ozt    ozt2kg        (Kilogramm <-> Troy-Unzen)
  3089.     kg2u    u2kg        (Kilogramm <-> Units (atomare Masseeinheit))
  3090.     kg2slug    slug2kg        (Kilogramm <-> Slug)
  3091.     f2c    c2f        (Fahrenheit <-> Celsius)
  3092.     c2k    k2c        (Celsius <-> Kelvin)
  3093.     ms2mph    mph2ms        (Meter/Sekunde <-> Meilen pro Stunde)
  3094.  
  3095. Die folgenden Größenordnungsumrechenfunktionen rechnen x in die jeweilige
  3096. Größenordnung um. Um 2500 Gramm in Kilogramm umzurechnen, lautet der Aufruf
  3097. also "upn 2500 kilo".
  3098.  
  3099.     10 hoch i:    10 hoch -i:    i:
  3100.     exa        atto        18
  3101.     peta        femto        15
  3102.     tera        pico        12
  3103.     giga        nano        9
  3104.     mega        micro        6
  3105.     kilo        milli        3
  3106.     hecta        centi        2
  3107.     deca        deci        1
  3108.  
  3109. Die folgenden Größenordnungen arbeiten auf Basis 2, z.B. um Bytes in Kilo-
  3110. bytes umzurechnen.
  3111.  
  3112.     2 hoch i:    2 hoch -i:    i:
  3113.     bgiga        bnano        1000
  3114.     bmega        bmicro        100
  3115.     bkilo        bmilli        10
  3116.  
  3117. In den Umrechenfunktionen steht die 2 übrigens für das englische Wort "to",
  3118. das genauso ausgesprochen wird wie "two"; "in2mm" liest man also
  3119. "inch to millimeter".
  3120. Quellen für die Umrechnungsfaktoren: die Taschenrechner Hewlett-Packard 28C
  3121. und Commodore SR9190R.
  3122.  
  3123. Zusätzlich gibt es die folgenden Sonderfunktionen:
  3124.  
  3125. help    Es wird eine Liste aller verfügbarer Operationen ausgegeben. Hinter
  3126.     den Operationen erscheint in Klammern die Anzahl der Zahlen, die
  3127.     für die Operation vom Stack genommen werden.
  3128.  
  3129. list    Gibt den aktuellen Inhalt des Stacks auf dem Bildschirm aus.
  3130.  
  3131. swap    Vertauscht die obersten beiden Stackelemente (x und y).
  3132.  
  3133. dup    dupliziert das oberste Stackelement.
  3134.  
  3135. pop    Löscht das oberste Element vom Stack.
  3136.  
  3137. clr    Löscht den gesamten Stack.
  3138.  
  3139.  
  3140. ANMERKUNGEN:
  3141.  
  3142. (*)     Zur Division kann sowohl der Slash (/) als auch der Backslash (\)
  3143. benutzt werden. Dadurch ist es möglich, den UPN-Rechner zu benutzen, auch
  3144. wenn das Shell-Flag -b gesetzt ist, das alle Slashes in der Eingabe in
  3145. Backslashes umformt.
  3146.  
  3147. (**)    Die trigonometrischen Funktionen wie sin, cos etc. arbeiten alle
  3148. im Gradmaß (Kreis = 2 Pi Grad). Mit den Operationen deg und grad können
  3149. Winkelangaben in Altgrad (Kreis = 360 Grad) und Neugrad (Kreis = 400 Grad)
  3150. umgerechnet werden.
  3151.  
  3152.  
  3153. Beispiele:
  3154. 1) Ausrechnen von 3+4:
  3155.     upn 3 4 +
  3156. 2) Berechnen der Oberfläche eines Kreises mit Radius 10:
  3157.     upn 10 sqr pi *
  3158. 3) Berechnen der Oberfläche eines Kreises mit Radius 123 mm in Zoll (inch):
  3159.     upn 123 sqr pi * mm2in
  3160. 4) Umrechnen von 36 Grad Celsius (Temperatur in Aachen am 12.8.1990) in
  3161.    Fahrenheit:
  3162.     upn 36 c2f
  3163. 5) Ab welcher Temperatur in Kelvin fängt Papier an zu brennen?
  3164.     upn 451 f2c c2k
  3165. 6) Wieviele Kilometer haben 25 nautische Meilen?
  3166.     upn 25 nmi2m kilo
  3167. 7) Wieviele Gramm hat eine Unze?
  3168.     upn 1 oz2kg milli
  3169. 8) Wieviele Bytes hat ein Kilobyte?
  3170.     upn 1 bkilo
  3171. 9) Und wieviele Bits hat ein Mega-ST 4?
  3172.     upn 4 bmega 8 *
  3173. 9) Benutzung des Formatstrings: Ausgabe der Fakultät von 12 in Hex:
  3174.     upn %lx 12 fact
  3175. 10) Shellvariablen können auch beutzt werden:
  3176.     echo Geben Sie zwei Zahlen ein:
  3177.     read x
  3178.     read y
  3179.     echo Die größere der Zahlen ist ^c
  3180.     upn %ld $x $y max
  3181. 11) Auflisten aller Operationen:
  3182.     upn help
  3183. 12) Zählen der Operationen des UPN-Rechners:
  3184.     upn %ld `upn help | wc -w` 2 /
  3185.    (zur Erklärung: "upn help" gibt für jede Operation zwei Worte aus, nämlich
  3186.    den Namen der Operation und die Anzahl der Parameter. "upn help | wc -w"
  3187.    zählt die Worte. Mit dem Ergebnis wird upn nochmals aufgerufen, um es durch
  3188.    2 zu teilen und damit die Anzahl der Operationen zu ermitteln.)
  3189. 13) Wieviel Speicherplatz in Kilobytes belegt eine Shell?
  3190.     upn %ld `mem` `sh mem` - bkilo
  3191.  
  3192. -----
  3193. vars - Ausgabe der Shellvariablen
  3194.  
  3195. Syntax: vars [-axs]
  3196.  
  3197. Gibt eine Liste der vom Anwender angelegten Shellvariablen nach StdOut.
  3198. Die Ausgabe besteht aus dem Variablennamen, dem aktuellen Wert und dem
  3199. Variablenstatus. Folgende Status-Angaben sind moeglich:
  3200.  
  3201. USR        Die Variable wurde vom Anwender oder von einem Shell-Script
  3202.         angelegt oder veraendert.
  3203. SYS        Die Variable wird vom System fuer das System angelegt.
  3204. R/O        Der Wert der Variablen kann nicht veraendert werden und
  3205.         die Variable kann nicht geloescht werden (siehe readonly).
  3206. EXP        Die Variable ist exportiert worden (siehe export).
  3207.  
  3208. Flags:    -a    Es werden alle Shellvariablen (auch die Systemvariablen)
  3209.         ausgegeben.
  3210.     -x    Die Variablen werden im Deklarationsformat, als in der
  3211.         Form "NAME=WERT" ausgegeben. Der Variablenstatus wird
  3212.         nicht ausgegeben. Dieses Format kann in ein Shellscript
  3213.         übernommen werden.
  3214.     -s    Es wird eine Statistik ueber den freien und belegten Platz
  3215.         in der Variablentabelle ausgegeben.
  3216.  
  3217. Beispiele:
  3218.  
  3219. Anlegen einer Variablen:
  3220.     VAR=Hallo
  3221.  
  3222. "vars" erzeugt eine Ausgabe der Art:
  3223.  
  3224. VAR    =Hallo            USR
  3225.  
  3226. "vars -x" erzeugt eine Ausgabe der Art:
  3227.  
  3228. VAR=Hallo
  3229.  
  3230. -----
  3231. ver - Anzeige diverser Versionsnummern
  3232.  
  3233. Syntax: ver [-oclgtdmMa]
  3234.  
  3235. Wenn kein Flag angegeben ist, wird -oc angenommen.
  3236.  
  3237. Die Flags haben folgende Bedeutung:
  3238.  
  3239.     -o  Ausgabe der Versionsnummer der Shell.
  3240.     -c  Ausgabe von Datum und Uhrzeit des Kompilierens der Shell. Damit
  3241.         lassen sich verschiedene Upgrades innerhalb einer Versionsnummer
  3242.         unterscheiden.
  3243.     -l  Es wird eine genauere Analyse der Möglichkeiten der vorliegenden
  3244.         Shell-Version ausgegeben, die Angaben über die Maximalanzahl der
  3245.         Funktionen und Variablen, die Größe des UPN-Stacks usw. enthält.
  3246.     -g  Ausgabe der Gemdos-Versionsnummer. Sie wird mit der Gemdos-Funktion
  3247.         Sversion festgestellt und im Format Hauptnummer.Unternummer ausge-
  3248.         geben.
  3249.     -t  Ausgabe der TOS-Version. Stammt aus dem TOS-Systemheader.
  3250.     -d  Ausgabe des TOS-Datums. Stammt ebenfalls aus dem TOS-Systemheader
  3251.         und wird wie dort im Format Monat/Tag/Jahr ausgegeben.
  3252.     -m  Ausgabe der Versionsnummer des installierten MiNT. Wenn kein MiNT
  3253.         installiert ist, erscheint "none".
  3254.     -M  Wie -m, aber es wenn MiNT nicht installiert ist, wird keine Ausgabe
  3255.         erzeugt.
  3256.     -a  Es erfolgen alle diese Ausgaben (außer -M und -l).
  3257.  
  3258. Beispiel: "ver -a" ergibt auf einem 1040ST mit TOS 1.4 und ohne MiNT
  3259. folgende Ausgabe:
  3260.  
  3261.     Okami Shell 1.2+                 [-o]
  3262.     compiled Dec. 22, 1990 21:09            [-c]
  3263.     GEMDOS Version 0.21                [-g]
  3264.     TOS Version 1.4                    [-t]
  3265.     TOS Date 04/06/1989                [-d]
  3266.     MiNT Version: none                [-m]
  3267.  
  3268. In eckigen Klammern jeweils das Flag, das die betreffende Zeile erzeugt (er-
  3269. scheint nicht in der Ausgabe).
  3270. Bei den Flags -o und -c erscheinen natürlich andere Werte, je nach der ver-
  3271. wendeten Version der Shell.
  3272.  
  3273. "ver -l" gibt bei der Standardversion folgende Ausgabe:
  3274.  
  3275.     Max. # of variables          100
  3276.     Max. # of functions          100
  3277.     Max. # of nested while's     16
  3278.     Max. # of lines for sort     500
  3279.     Max. filespec length         80
  3280.     Max. length of input line    400
  3281.     Length of history buffer     100
  3282.     Length of UPN stack          32
  3283.     Version supports MiNT
  3284.  
  3285. "Max. # of nested while's" ist die Maximalanzahl der while-Schleifen, die
  3286. ineinander geschachtelt werden können.
  3287. "Max. # of lines for sort" ist die Maximalanzahl der Zeilen, die mit dem
  3288. internen Kommando sort sortiert werden können.
  3289. "Max. filespec length" ist die maximale Länge eines Dateinamens incl. Pfad.
  3290. "Max. length of input line" ist die maximale Länge einer Eingabezeile nach
  3291. der Expansion von Variablen, Command Substitution usw.
  3292. "Length of history buffer" ist die Anzahl der Eingabezeilen, die in dem
  3293. Ringpuffer der Tastatur-History gespeichert werden können.
  3294.  
  3295. -----
  3296. virus - Aufspüren und Entfernen von Bootsektorviren
  3297.  
  3298. Syntax: virus [-xvsi] {drive}
  3299.  
  3300. Es wird der Bootsektor von jedem angegebenen Laufwerk eingelesen und auf
  3301. Ausführbarkeit getestet. Ein Bootsektor ist ausführbar, wenn seine Prüf-
  3302. summe 0x1234 beträgt; nur in diesem Fall kann ein Virus sich beim Booten
  3303. dieser Diskette oder Partition im Speicher einnisten. Auf Wunsch wird ein
  3304. ausführbarer Bootsektor nicht-ausführbar gemacht.
  3305. Wenn kein Laufwerk angegeben ist, wird nur Laufwerk A: untersucht.
  3306.  
  3307. Flags:
  3308.     -x    Ein ausführbarer Bootsektor wird nicht-ausführbar gemacht,
  3309.         indem das letzte Byte des Bootsektors inkrementiert wird.
  3310.     -v    Es erscheinen Meldungen über Prüfsumme und Ausführbarkeit
  3311.         zu jedem untersuchten Laufwerk. Wenn dieses Flag nicht an-
  3312.         gegeben ist, werden nur Meldungen über ausführbare Boot-
  3313.         sektoren ausgegeben.
  3314.     -s    Der Bootsektor wird nicht untersucht, sondern nach StdOut
  3315.         geschrieben.
  3316.     -i    Der Bootsektor wird nicht von dem angegebenen Laufwerk,
  3317.         sondern von StdIn eingelesen. Wenn der eingelesene Boot-
  3318.         sektor ausführbar ist und -x gesetzt ist, wird der Boot-
  3319.         sektor auf das angegebene Laufwerk geschrieben.
  3320.  
  3321. Beispiele:
  3322.     virus
  3323.         untersucht Laufwerk A: und gibt eine Warnung aus, wenn der
  3324.         Bootsektor ausführbar ist, ändert ihn aber nicht. Dieses
  3325.         Kommando kann in Shellscripts stehen, da es sich im
  3326.         Normalfall (Bootsektor ist nicht ausführbar) "unsichtbar"
  3327.         verhält.
  3328.     virus B: C:
  3329.         dasselbe für Laufwerk B: und Partition C:.
  3330.     virus bc
  3331.         genauso wie das vorige Beispiel.
  3332.     virus -s a: >boot.dat
  3333.         der Bootsektor von Laufwerk A: wird in die Datei boot.dat
  3334.         geschrieben.
  3335.     virus -i -x a: <boot.dat
  3336.         der zuvor gesicherte Bootsektor wird auf Ausführbarkeit 
  3337.         untersucht und ggfs. nicht-ausführbar gemacht.
  3338.     virus -s c: | hd
  3339.         es wird ein Hexdump des Bootsektors von Partition C: er-
  3340.         zeugt.
  3341.  
  3342. Rückgabewert:
  3343.     -1    Aufruffehler
  3344.     0    Der Bootsektor ist nicht ausführbar (gemacht worden).
  3345.     1    Der Bootsektor ist (immer noch!) ausführbar.
  3346. Hierbei bezieht sich dieser Wert auf das zuletzt untersuchte Laufwerk.
  3347.  
  3348. Die Idee zu diesem Kommando stammt aus dem Data-Becker-Buch "Atari ST intern
  3349. Band 2" von Martin Pauly, allerdings habe ich die Flags -s und -i hinzu-
  3350. gefügt und die Einleseroutinen geändert, damit auch Festplattenpartitionen
  3351. untersucht werden können.
  3352.  
  3353. -----
  3354. wc - Word Count
  3355.  
  3356. Syntax: wc [-lwcn] {File}
  3357.  
  3358. Es werden die Anzahl der Zeilen, Worte und Zeichen der angegebenen Datei
  3359. oder von StdIn ausgegeben. Ein Wort wird durch Leerzeichen, Tabs oder
  3360. Newline-Zeichen begrenzt.
  3361.  
  3362. Flags:    -l    Ausgabe der Anzahl der Zeilen
  3363.     -w    Ausgabe der Anzahl der Worte
  3364.     -c    Ausgabe der Anzahl der Zeichen
  3365.     -n    Ausgabe des jeweiligen Dateinamens
  3366. Wenn keine Flags angegeben sind, gelten alle Flags als aktiviert.
  3367.  
  3368. Beispiel:
  3369. 1) Ausgabe der Anzahlen der Zeilen und Zeichen aller C-Quell- und Header-
  3370.    dateien im aktuellen Directory:
  3371.     wc -lcn *.c *.h
  3372.         
  3373. 2) Ausgabe der Anzahl der internen Kommandos:
  3374.     cmds | wc -l
  3375.  
  3376. Rückgabewert:
  3377.     -1    Aufruffehler
  3378.     sonst    die Anzahl der gezählten Dateien.
  3379.  
  3380. -----
  3381. what - Identifizieren von Dateien
  3382.  
  3383. Syntax: what [-s] {Datei}
  3384.  
  3385. Dieses Kommando ist in der Unix-Welt sehr beliebt und gehört dort zu dem
  3386. Sourcecode-Control-System (SCCS). Der Sinn ist, eine jede Datei, egal ob
  3387. Ascii oder binär, anhand eines speziellen Codes identifizieren zu können.
  3388. Dieser Code steht irgendwo in der Datei, gefolgt von einer Zeichenkette, die
  3389. die Datei, den Autor und die Version kennzeichnet. Der Code ist @(#) (At
  3390. Klammer auf Doppelkreuz Klammer zu).
  3391. Das Kommando what sucht in jeder angegebenen Datei (oder in StdIn, wenn keine
  3392. Datei angegeben ist) nach der Zeichenkette @(#) und gibt alles aus, was
  3393. dahinter bis zum nächsten doppelten Anführungszeichen ("), Größerzeichen (>),
  3394. Zeilenende (\n) oder Nullbyte (\0) kommt.
  3395. Die übliche Art, diesen Identifikationsstring in einem Programm unterzubringen,
  3396. ist folgende Zeile kurz nach Dateibeginn:
  3397.  
  3398.     static char _M_ID_[]="@(#) Okami Shell 1.2 - cmds5.c";
  3399.  
  3400. Die Zeichenkette "@(#) Okami Shell 1.2 - cmds5.c" steht dann sowohl in der
  3401. C-Quelldatei als auch in dem O-File und dem ausführbaren Programm. Wenn alle
  3402. Module eines Programms auf diese Weise gekennzeichnet sind, kann man mit
  3403. what eine Liste aller Module, auch Librarymodule, bekommen, aus denen ein
  3404. Programm zusammengesetzt ist.
  3405. Bei den Programmen der Okami-Shell funktioniert what leider nur mit den Shell-
  3406. scripts, da der Compiler festgestellt hat, daß die Variable _M_ID_ nirgend-
  3407. wo im Programm benutzt wird, also hat er sie kurzerhand wegoptimiert. Mög-
  3408. licherweise arbeiten aber nicht alle Compiler derart radikal.
  3409. Wer die Quellen der Okami-Shell hat, kann mit what die Namen der in den einzel-
  3410. nen Modulen enthaltenen Funktionen ermitteln (z.B. "what cmds*.c").
  3411.  
  3412. Flag:    -s    Wenn dieses Flag angegeben ist, wird nur das erste @(#) in
  3413.         der Datei gesucht.
  3414.  
  3415. Beispiel:
  3416.     what *.sh    erzeugt eine Liste der Versionen aller Shellscripts
  3417.     what -s doc/*    eine Art Inhaltsverzeichnis der Anleitungsdateien
  3418.  
  3419. -----
  3420. while , do, continue, break, done - Ausführen von Kommandos in einer Schleife
  3421.  
  3422. Syntax: while Kommando1
  3423.     [do]
  3424.     {Kommandos2|continue|break}
  3425.     done
  3426.  
  3427. Das while-Konstrukt darf nur in Shell-Scripts stehen. Die Ergebnisse bei
  3428. der Eingabe von der Tastatur oder einer Schnittstelle sind undefiniert
  3429. (was völlig natürlich ist).
  3430.  
  3431. Die Zeilen zwischen "while" und "done" werden ausgeführt, bis Kommando1
  3432. den Rückgabewert 0 liefert. In diesem Fall wird mit der Ausführung in der
  3433. "done" folgenden Zeile fortgefahren.
  3434. Das Kommando "break" beendet die while-Schleife augenblicklich. Es darf in
  3435. einem if-fi-Konstrukt stehen (was es normalerweise auch tut).
  3436. Das Kommando "continue" springt zurück zum zugehörigen "while"-Kommando.
  3437. Der aktuelle Schleifendurchlauf wird also beendet, und es beginnt ein
  3438. neuer Schleifendurchlauf. Ebenso wie "break" darf auch "continue" in einem
  3439. if-fi-Konstrukt stehen.
  3440. Die Wirkung von "break" und "continue" ist demnach identisch mit der von
  3441. "break" und "continue" in der Programmiersprache C.
  3442. Das Kommando "do" ist ohne jede Wirkung. Es kann aus Kompatibilitäts- oder
  3443. aus kosmetischen Gründen benutzt werden.
  3444.  
  3445. Typische Kandidaten für "Kommando1" sind true, false und test (bzw. "[").
  3446.  
  3447. Beispiele:
  3448.  
  3449. 1) Wiederholen von Anweisungen:
  3450.  
  3451.     while [ $x != abc ]
  3452.     do
  3453.       echo Bitte abc eingeben.
  3454.       read x
  3455.     done
  3456.  
  3457. Die Zeile "do" kann ebensogut weggelassen werden.
  3458.  
  3459.  
  3460. 2) Dateien mit der Fileselect-Box einlesen, bis der Anwender "Abbruch"
  3461.    anklickt:
  3462.  
  3463.     while true
  3464.       fsel *.* . BUTTON
  3465.       if [ $BUTTON = 0 ]
  3466.         break
  3467.       fi
  3468.     done
  3469.  
  3470.    "while true" ist also eine Endlosschleife, die nur durch break verlassen
  3471.    werden kann.
  3472.  
  3473.  
  3474. 3) Wie 2), aber es werden nur Dateien akzeptiert, die noch nicht existieren.
  3475.    Wenn eine bereits existierende Datei angewählt wurde (was mit [ -f $FILE ]
  3476.    herausgefunden wird), wird die while-Schleife mit "continue" von vorne
  3477.    begonnen.
  3478.  
  3479.     while true
  3480.       # den Dateinamen in die Variable FILE einlesen
  3481.       FILE=`fsel *.* datei.txt BUTTON`
  3482.       if [ $BUTTON = 0 ]
  3483.         break
  3484.       fi
  3485.       if [ -f $FILE ]
  3486.         continue
  3487.       fi
  3488.       ...................... (mache was mit $FILE)
  3489.     done
  3490.  
  3491.  
  3492. 4) Eine Variable eingeben lassen, solange bis sie wirklich einen Wert
  3493.    enthält.
  3494.  
  3495.     while [ -v VARIABLE ]
  3496.       echo Bitte geben Sie die Variable ein.
  3497.       read VARIABLE
  3498.     done
  3499.  
  3500.  
  3501. Siehe auch: test
  3502.         true
  3503.         false
  3504.         if
  3505.  
  3506. -----
  3507. xargs - Eingabe als Parameter für andere Kommandos
  3508.  
  3509. Syntax: xargs [Kommando {Parameter}]
  3510.  
  3511. Liest Zeilen von StdIn und führt das angegebene Kommando mit den angegebenen
  3512. Parametern und den eingelesenen Zeilen aus. Wenn kein Kommando angegeben
  3513. ist, wird als Default "echo" benutzt.
  3514. Wenn Kommando oder Parameter die Zeichenkette "{}" (öffnende und schließende
  3515. geschwungene Klammer) enthalten, wird die von StdIn eingelesene Zeile
  3516. anstelle dieser Zeichenkette eingesetzt. Ansonsten wird die eingelesene
  3517. Zeile nach einem Leerzeichen an den Parameterstring angehängt.
  3518.  
  3519. Beispiele:
  3520.     ls *.sh | xargs .
  3521.         führt alle Shellscripts im aktuellen Verzeichnis aus.
  3522.     ls *.c | xargs echo Die Datei {} ist da
  3523.         Erzeugt als Ausgabe z.B.:
  3524.             Die Datei sh.c ist da
  3525.             Die Datei cmds.c ist da
  3526.             Die Datei cmds2.c ist da
  3527.         usw.
  3528.     find e:\ *.dup | xargs rm -f
  3529.         Löscht alle *.dup-Dateien auf Laufwerk E: ohne Berücksichti-
  3530.         gung von Readonly-Dateien (rm -f).
  3531.     cmds | xargs echo {}"^t"^c
  3532.         Gibt die Namen aller interner Kommandos in mehreren Spalten
  3533.         auf dem Bildschirm aus. (Das geht einfacher mit "cmds -C")
  3534.  
  3535. ---------------------------------------------------------------------------
  3536.  
  3537. 2) Externe Kommandos:
  3538.  
  3539. Wenn beim Shell-Prompt ein Kommando eingegeben wird, das keinem internen
  3540. Kommando entspricht, wird eine Datei mit dem entsprechenden Namen unter
  3541. allen in der Shell-Variablen PATH enthaltenen Pfaden gesucht. Wenn dort
  3542. eine Datei mit dem angegebenen Namen und einem der in $XEXT angegebenen
  3543. Extendern existiert, wird sie als Binärdatei aufgerufen. Wenn dort eine
  3544. Datei mit dem angegebenen Namen und einem der in $SEXT angegebenen Exten-
  3545. dern existiert, wird sie als Shellscript ausgeführt.
  3546.  
  3547. Beispiel: Es sei
  3548.     PATH=.,d:\bin
  3549.     XEXT=.prg,.tos
  3550.     SEXT=.sh
  3551.  
  3552. Nach Eingabe des Kommandos "test" werden die folgenden Dateien gesucht, die
  3553. erste gefundene Datei wird ausgeführt:
  3554.  
  3555.     test.prg
  3556.     test.tos
  3557.     test.sh
  3558.     d:\bin\test.prg
  3559.     d:\bin\test.tos
  3560.     d:\bin\test.sh
  3561.  
  3562. Die Dateien, die auf .prg oder .tos enden, werden als Binärdateien aufge-
  3563. rufen.
  3564. Die Dateien, die auf .sh enden, werden als Shellscripts ausgeführt.
  3565. Wenn mehrere der angeführten Dateien existieren, wird die nur erste
  3566. gefundene Datei ausgeführt.
  3567. Durch Eingabe von "type test" kann festgestellt werden, welche Datei
  3568. durch das Kommando test ausgeführt würde oder ob es sich um ein internes
  3569. Kommando handelt.
  3570.  
  3571. In der Shell-Variablen GEXT werden analog zu XEXT und SEXT Extender gespei-
  3572. chert, die angeben, welche Dateinen als GEM-Programme gestartet werden.
  3573. GEM-Programme werden über die Shellfunktion gemexec gestartet. Diese Funktion
  3574. kann vom Anwender frei verändert werden und darüber entscheiden, welche Aktio-
  3575. nen sie vor und nach dem Start des Programms ausführt oder ob sie es überhaupt
  3576. startet. Siehe hierzu auch den Abschnitt zu gemexec unter den internen Komman-
  3577. dos.
  3578.  
  3579. GEXT hat Wirkung auf alle Binärprogramme, also auf solche, die über die
  3580. Eingabe ihres Namens und mit XEXT gestartet werden, als auch auf solche,
  3581. die mit dem exec-Kommando aufgerufen werden. GEXT ist ohne Wirkung für
  3582. Shell-Scripts, auch wenn einer der Extender in GEXT mit einem der Extender
  3583. in SEXT übereinstimmt.
  3584.  
  3585. Folgende Werte sind nach Start der Shell voreingestellt:
  3586.     PATH=.,..,$HOME,$HOME\bin
  3587.     XEXT=.prg,.tos,.ttp,.app
  3588.     SEXT=.sh
  3589.     GEXT=.prg
  3590. Die Variablen können in der Datei profile verändert oder erweitert werden.
  3591.  
  3592. Außerdem ist es möglich, den vollen Pfadnamen zum Aufruf anzugeben. Dabei
  3593. muß jedoch auch der Extender mit angegeben werden. Das Kommando wird nur
  3594. ausgeführt, wenn der Extender einem der in $XEXT oder $SEXT angeführten
  3595. entspricht. (Dies entspricht dem Datei-Attribut "Executable" unter Unix.
  3596. In der Okami-Shell wird dieses Attribut durch die Shell-Variablen XEXT und
  3597. SEXT simuliert.)
  3598.  
  3599.  
  3600. Der Quellcode sämtlicher externer Kommandos gehört zum Lieferumfang.
  3601.  
  3602. Folgende externe Kommandos werden mitgeliefert:
  3603.  
  3604.  
  3605. -----
  3606. calc - Schnittstelle zum UPN-Rechner
  3607.  
  3608. Datei:    calc.sh
  3609. Syntax: calc
  3610.  
  3611. Dieses Shellscript dient dazu, das interne Kommando upn benutzerfreundlich
  3612. aufzurufen. Es erscheint das Prompt:
  3613.     upn >
  3614. Nun können beliebige upn-Ausdrücke eingegeben werden (siehe das interne
  3615. Kommando upn). Jeder Ausdruck wird mit ENTER abgeschlossen. Es können auch
  3616. unvollständige Ausdrücke angegeben werden, z.B. sind äquivalent:
  3617.  
  3618.     upn > 2 3 * 4 +
  3619.  
  3620. und
  3621.     upn > 2 3
  3622.     upn > *
  3623.     upn > 4 +
  3624.  
  3625. In der Eingabe kann die Zeichenkette "$_" (Dollar Underscore) benutzt wer-
  3626. den, um das Ergebnis der letzten Eingabezeile zu repräsentieren. Beispiel:
  3627.  
  3628.     upn > 17 4 +
  3629.     upn > pi 2 * sin $_ /
  3630.  
  3631. berechnet erst 17+4, das Ergebnis wird in der zweiten Zeile benutzt. Achtung:
  3632. in $_ wird immer nur der ganzzahlige Anteil gespeichert.
  3633.  
  3634. Durch Eingabe von clr wird der Stack gelöscht, durch Eingabe von list wird
  3635. der Inhalt des Stacks ausgegeben.
  3636.  
  3637. Das Programm wird beendet durch Eingabe von q. Die Shellvariable "_" (Under-
  3638. score) enthält dann den ganzzahligen Anteil des letzten Ergebnisses.
  3639.  
  3640. Siehe auch:    upn
  3641.  
  3642. -----
  3643. contact - Ausdrucken der Pd-Software-Kontaktkarte
  3644.  
  3645. Datei:    contact.sh
  3646. Syntax: contact
  3647.  
  3648. Durch die Kontaktkarte können Anwender von Pd-Software den Programmieren
  3649. ihre Meinung über ein Programm mitteilen und sich über neuere Programm-
  3650. versionen informieren lassen. Die Verwendung solcher Kontaktkarten
  3651. wurde in der Zeitschrift pd-Szene Nr. 2 vorgeschlagen.
  3652.  
  3653. Die Kontaktkarte wird ueber den Hardcopy-Drucker als Postkarte ausgedruckt
  3654. und muss nur noch gefaltet und zusammengeklebt werden (evtl. mit einem
  3655. Fotokopierer verkleinern).
  3656.  
  3657. -----
  3658. format - Formatierten von Disketten
  3659.  
  3660. Datei:    format.ttp
  3661. Source: format.c
  3662. Syntax: format [-s(SPT)] [-t(TPD)] [-1] [-i(Interleave)] [-v(Virgin)]
  3663.         [-n(VersNr)] [-N] [-B] [-x] [-q] [-l(Diskname)][Drive]
  3664.  
  3665. Vor dem Formatieren erfolgt eine Sicherheitsabfrage. Nach Eingabe von y
  3666. wird formatiert, nach einer anderen Eingabe oder Druck auf ENTER wird das
  3667. Programm abgebrochen.
  3668. Ebenso erfolgt eine Sicherheitsabfrage bei eigenartigen Werten (z.B.
  3669. anderen Laufwerksnummern als A: und B: etc.)
  3670.  
  3671. Die Voreinstellungen der einzelnen Flags sind:
  3672.     format -s9 -t80 -i1 -v0xe5e5 -n0x1000001 A:
  3673.  
  3674.  
  3675. Flags:
  3676.     -s    Anzahl der Sektoren pro Track. Default: 9.
  3677.     -t    Anzahl der Tracks pro Seite. Default: 80.
  3678.     -1    Wenn angegeben, wird die Diskette einseitig formatiert.
  3679.         Wenn nicht angegeben, wird die Diskette zweiseitig
  3680.         formatiert. Default: zweiseitig.
  3681.     -i    Die Anzahl der physikalischen Sektoren zwischen zwei
  3682.         logischen Sektoren. Default: 1.
  3683.     -v    Der Wert, der in die formatierten Sektoren geschrieben
  3684.         wird. Normalerweise 0xe5e5. Unabhängig von dieser Ein-
  3685.         stellung werden die Spuren 0 und 1 immer mit Nullen ge-
  3686.         füllt.
  3687.     -n    Die Versionsnummer, die in den Bootsektor geschrieben
  3688.         wird. Werte größer als 0x1000000 ergeben eine zufällige
  3689.         Versionsnummer.
  3690.     -N    Es wird kein Bootsektor angelegt.
  3691.     -B    Es wird nicht formatiert (nur Bootsektor).
  3692.     -x    Der Bootsektor wird ausführbar gemacht.
  3693.     -q    Es erfolgen keine Sicherheitsabfragen.
  3694.     -l    Es wird der angegebene Diskettenname (Volume-Label) erzeugt.
  3695.     Drive    Das zu formatierende Laufwerk. Es gilt nur der erste 
  3696.         Buchstabe, d.h. es sind äquivalent:
  3697.             format A:
  3698.             format a:
  3699.             format a
  3700.             format abcdefg
  3701.             format
  3702.         Default ist Laufwerk A:.
  3703.  
  3704.  
  3705. Beispiele:
  3706. 1) format
  3707.     Formatiert die Diskette in Laufwerk A: mit 2 Seiten, 80 Tracks pro
  3708.     Seite, 9 Sektoren pro Track mit Interleave 1 und Virgin 0xe5e5. Es
  3709.     wird ein nicht-ausführbarer Bootsektor angelegt. Es wird kein Dis-
  3710.     kettenname erzeugt
  3711.     => der Standardaufruf zum Formatieren von Disketten.
  3712. 2) format B: -ldisk1
  3713.     Formatiert die Diskette in Laufwerk B: mit den unter 1) beschrie-
  3714.     benen Standardwerten. Außerdem wird der Diskettenname "disk1" er-
  3715.     zeugt.
  3716. 3) format -s10 B:
  3717.     Formatiert die Diskette in Laufwerk B: mit 10 Sektoren pro Track.
  3718. 4) format -s10 -q B:
  3719.     Wie 3), aber ohne Sicherheitsabfrage.
  3720. 5) format -s10 -v0 -N
  3721.     Formatiert die Diskette in Laufwerk A: mit 10 Sektoren pro Track.
  3722.     Die Sektoren werden mit Nullen gefüllt. Es wird kein Bootsektor
  3723.     angelegt. Es erfolgt eine Sicherheitsabfrage wegen eines unge-
  3724.     wöhnlichen Virgin-Wertes (-v0).
  3725. 6) format -s10 -v0 -N -q
  3726.     Wie 5), aber ohne Sicherheitsabfrage.
  3727.  
  3728.  
  3729. Vorsicht:
  3730.     Die Parameter -i (Interleave) und -v (Virgin) sollten nur in
  3731.     Sonderfällen geändert werden. Der Interleave-Faktor muß mit der
  3732.     Anzahl der Sektoren pro Track teilerfremd sein (wird vom Pro-
  3733.     gramm nicht überprüft!!!!)
  3734.  
  3735.  
  3736. Laufzeit:
  3737.     format        (Standardwerte zweiseitig)
  3738.         dauert ca. 1 Minute 38 Sekunden
  3739.     format -1    (Standardwerte einseitig)
  3740.         dauert ca. 50 Sekunden
  3741.     format -B    (Anlegen eines Bootsektors ohne Formatierung)
  3742.         dauert ca. 2 Sekunden
  3743.     (Alle Zeiten incl. Ladezeit des format-Programms von Festplatte,
  3744.     beim Aufruf mit -q [ohne Sicherheitsabfrage]. Gemessen mit dem
  3745.     time-Kommando.)
  3746.  
  3747. -----
  3748. gem - Benutzung der Accessories
  3749.  
  3750. Datei:    gem.prg
  3751. Source: gem.lst
  3752. Syntax: gem
  3753.  
  3754. Es wird ein GEM-Desktop mit Menüzeile angezeigt. Von dieser Menüzeile aus
  3755. können die installierten Accessories benutzt werden. Nach Anklicken des
  3756. Menüpunktes "EXIT" erscheint wieder das Shell-Prompt.
  3757.  
  3758. -----
  3759. print - Ausdrucken einer Datei
  3760.  
  3761. Dateien: print.sh, $HOME\print.tr
  3762. Syntax:  print Filename
  3763.  
  3764. Die angegebene Datei wird mit der tr-Tabelle print.tr gefiltert und über
  3765. die parallele Druckerschnittstelle (PRT:) ausgegeben.
  3766. WICHTIG: Die Datei print.tr muß sich im Home-Verzeichnis befinden, also
  3767. in dem Verzeichnis, in dem sich auch profile und i.d.R. sh.ttp befinden.
  3768.  
  3769. Es werden folgende Zeichen gefiltert:
  3770.  
  3771.     'Ä' zu '['
  3772.     'Ö' zu '\'
  3773.     'Ü' zu ']'
  3774.     'ä' zu '{'
  3775.     'ö' zu '|'
  3776.     'ü' zu '}'
  3777.     'ß' zu '~'
  3778.  
  3779. Damit ist ein korrektes Ausdrucken von Umlauten gewährleistet.
  3780. Wenn diese Konvertierung nicht erwünscht ist, kann eine Datei mit
  3781.     cat Datei >PRT:
  3782. ausgedruckt werden.
  3783. Wenn auf dem seriellen Drucker gedruckt werden soll, muß in der Datei
  3784. print.sh PRT: zu AUX: geändert werden.
  3785.  
  3786. -----
  3787. sed - Der Stream-Editor
  3788.  
  3789. Dateien: sed.ttp, sed/callsed.sh, sed/*
  3790. Syntax: sed [-n] [-g] [-e script] [-f sfile] {file}
  3791.         (siehe sed/sed.doc)
  3792.  
  3793. Der Stream-Editor ist ein universelles Programm, das seine Standardeingabe
  3794. liest, alles mögliche damit macht und das Ergebnis wieder auf die Standard-
  3795. ausgabe schreibt. Es handelt sich bei dem Programm um Gnu-sed, einen Teil des
  3796. Gnu-Betriebssystems. Es ist Public Domain, solange es mit Hinweis auf den Autor
  3797. und mitsamt den Quellen verbreitet wird. Es unterliegt den Gnu-Lizenzbestim-
  3798. mungen.
  3799. Der Autor ist Eric S. Raymond, die Quellen und alle zugehörigen Beispieldateien
  3800. befinden sich in dem Ordner sed. Ich habe die Quellen geringfügig angepaßt,
  3801. um sie auf meinem System kompilieren zu können. Eine ausführliche Anleitung
  3802. befindet sich in der Datei sed.doc, mitsamt einem Beispiel-sed-Script, das
  3803. ein Pascalprogramm in C umformt. Außerdem befindet sich im sed-Ordner ein
  3804. Okami-Shellscript namens callsed.sh, das benutzt werden kann, um sed trotz
  3805. gesetzem b- und x-Flag (Slash->Backslash und cd vor Binärprogrammen) aufzu-
  3806. rufen. Man gibt also nicht ein:
  3807.     sed ausdruck
  3808. , sondern
  3809.     callsed 'ausdruck'
  3810. . Die Anführungszeichen sorgen dafür, daß die Slashes und sonstige Sonder-
  3811. zeichen wie Circumflex (^) in ausdruck nicht von der Shell interpretiert wer-
  3812. den.
  3813. Man kann auch schlauer vorgehen und callsed.sh umbennen in sed.sh und sed.ttp
  3814. in einen Ordner namens $HOME/bin/sed kopieren sowie den Aufruf in callsed.sh
  3815. anpassen, dann kann man auch "sed 'ausdruck'" eingeben, weil dann das Script
  3816. und nicht das Programm gestartet wird.
  3817.  
  3818. -----
  3819. showpic - Anzeigen von Screenformat-Bildern
  3820.  
  3821. Datei: showpic.sh
  3822. Syntax: showpic
  3823.  
  3824. Dieses Shellscript ist ein Beispiel zur Programmierung der Shell. Es läßt
  3825. den Anwender eine Datei in einer Fileselect-Box auswählen und bestimmt
  3826. anhand des Dateinamen-Extenders, ob es sich um eine Doodle-Datei (.PIC,
  3827. Dateilänge 32000 Bytes) oder eine Degas-Datei (.PI3, 32066 Bytes) handelt,
  3828. und bestimmt entsprechend die Länge des Dateiheaders (Doodle 0, Degas 34
  3829. Bytes). Wenn der Extender weder .PIC noch .PI3 ist, muß der Anwender die
  3830. Länge des Headers eingeben.
  3831. Danach wird das Bild geladen und angezeigt. Nach einem Druck auf ENTER wird
  3832. der Bildschirm gelöscht, und das ganze beginnt von vorne, bis der Anwender
  3833. "Abbruch" anwählt.
  3834.  
  3835. Das Script demonstriert die vielfältigen Möglichkeiten der Shell-Pro-
  3836. grammierung mit Variablen, Pipes, Eingaben, Shellflags und dem if- und
  3837. while-Kommando.
  3838.  
  3839. ----------------------------------------------------------------------------
  3840. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3841. An diese Stelle können weitere Erklärungen hinzugefügt werden, die bei Druck
  3842. auf Help nach einem Kommando erscheinen sollen, z.B. Erklärungen zu eigenen
  3843. externen Kommandos oder Abschnitte aus okami.doc. Bitte das Format beachten:
  3844. - Zeile aus fünf Minuszeichen
  3845. - Zeile, die mit dem Stichwort beginnt
  3846. - Erklärung geht bis zur nächsten Zeile aus fünf Minuszeichen (exkl.)
  3847. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3848.  
  3849.